Я использую RxCpp в настройке вида модели. Метод обновления представления подписан на наблюдаемый (через лямбда-захват this
). Неопределенный доступ к памяти будет иметь место, если подписка переживет экземпляр представления. Я не хочу, чтобы подписка поддерживала представление. Поэтому мне нужно, чтобы подписка заканчивалась детерминистически на деструкторе представления. Это звучит как случай для RAII.
Это когда-нибудь опасно? Это как-то злоупотребление rx? Я прочитал, чтобы предпочесть take_until
в похожих настройках. Почему это может быть лучше, и как это может быть использовано здесь?
Спасибо!
#include "rxcpp/rx.hpp"
class MyView : public View
{
public:
MyView(rxcpp::observable<int> obs) : obs (obs)
{
sub = obs.subscribe ([this] (int i) { update(i); });
}
~MyView()
{
sub.unsubscribe();
}
void update(int i)
{
number = i;
repaint();
}
private:
rxcpp::observable<int> obs;
rxcpp::subscription sub;
int number;
};
Задача ещё не решена.
Других решений пока нет …