RxCpp RAII可观察订阅

时间:2018-02-10 18:31:07

标签: c++ raii model-view rxcpp

我在模型视图设置中使用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;
};

0 个答案:

没有答案