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