虽然rxcpp::composite_subscription
有一个方法unsubscribe
,但是它没有在销毁时调用它
rxcpp库包含一个类,自动调用unsubscribe
时,对象超出了作用域?
订阅没有在析构函数中调用unsubscribe()
的原因是因为它是一个取消句柄,而不是RAII对象。订阅对象可以被复制,也可以被丢弃。
如果订阅析构函数取消订阅,则放弃订阅将取消工作。这不是订阅合同。保持订阅活动不会使工作保持活动,丢弃订阅不会停止或破坏工作(这是在评论中正确提到的弱生存期)
这里真正的问题是rxcpp以与其他rx库相同的方式建模生命周期。这些库使用GC来管理生命周期。一个新的库正在构建中,它有一些变化来支持结构化并发和非gc生命周期。有Lewis Baker和Eric Neibler的演讲和论文解释了Single
的形式。经典的rx序列值现在正在原型化。