发布/订阅和智能指针

3
我想实现一个简单的发布/订阅模式,其中:
一个单独的发布者向其订阅者发布一个令牌(指向一个对象的指针)。发布者和订阅者都是独立的线程。我打算为每个订阅者添加线程安全队列,以便发布者可以在订阅者处理令牌时继续分发令牌。
正如您所看到的那样,这意味着所有订阅者实际上共享相同的指针(注意:订阅者不能以任何方式修改指向的对象,因此没有问题)。一旦该共享指针不再被任何订阅者使用,如果最后一个订阅者线程完成了对它的使用,它将自动删除。
这个场景适合使用智能指针吗?如果是这样,我应该使用哪种类型的智能指针?
我使用的开发环境是Windows+MSVC2008,同时使用Intel TBB、Boost和Qt。
2个回答

4

boost::weak_ptr在他的情况下不起作用,除非发布者保证在最后一个订阅者完成之前保持对象的存活。这在异步队列中是不可行的。 - Franci Penov
@Franci Penov:对于你的答案和这个评论点赞。提供boost smart_ptr文档链接是唯一让我不将其评为无用的因素。 - mghie
啊,你说得对。我被提高线程安全性的想法所吸引,完全忘记了整个“它实际上并没有持有引用”的问题! - metao

4
您所描述的是控制对象生命周期的经典COM模式。您需要一个智能指针来保持对对象的引用计数- boost::shared_ptr, boost::intrusive_ptr 或 ATL 的 CComPtr 类。我建议使用 shared_ptr,因为其他两个需要您自己实现引用计数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接