我在模型视图设置中使用 RxCpp。视图更新方法订阅了一个可观察对象(通过 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;
};