1

虽然rxcpp::composite_subscription有一个方法unsubscribe,但它不会在销毁时调用它。

rxcpp 库是否包含一个unsubscribe在对象超出范围时自动调用的类?

4

1 回答 1

1

订阅没有unsubscribe()在其析构函数中调用的原因是因为它是取消句柄,而不是 RAII 对象。订阅对象可以被复制,也可以被丢弃。

如果订阅析构函数取消订阅,则丢弃订阅将取消工作。这不是订阅合同。保持订阅活动不会使工作保持活动状态,并且丢弃订阅不会停止或破坏工作(这是评论中正确提到的弱生命周期)

这里真正的问题是 rxcpp 以与其他 rx 库相同的方式对生命周期进行建模。这些库使用 GC 来管理生命周期。

正在构建一个新库,该库具有支持结构化并发和非 GC 生命周期的更改。Lewis Baker 和 Eric Neibler 的谈话和论文解释了这种Single形式。经典的 rx 值序列现在正在原型化中。

于 2021-09-29T14:08:49.613 回答