我在模型视图设置中使用RxCpp。视图更新方法订阅了一个observable(通过lambda捕获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;
};