3

我想实现一个简单的发布/订阅模式,其中:

单个发布者向其订阅者发布令牌(指向对象的指针)。发布者和订阅者都是独立的线程。我计划为每个订阅者添加线程安全队列,以便发布者可以在订阅者处理令牌时继续将令牌分发给订阅者。

如您所见,这意味着所有订阅者实际上共享相同的指针(注意:订阅者无论如何都不能修改指向的对象,所以没有问题)。一旦共享指针不再被任何订阅者使用,如果指针可以在最后一个订阅者线程完成后自动删除它自己,那就太好了。

这是使用智能指针的好地方吗?如果是这样,我应该使用哪些智能指针?

我在 Windows 上使用 MSVC2008 进行开发,并且正在使用 Intel TBB、Boost 和 Qt。

4

2 回答 2

4

如果我假设你的设计是可行的(零上下文闻起来很有趣,但很可能是正确的), boost::shared_ptr 可能是要走的路。

http://www.boost.org/doc/libs/1_38_0/libs/smart_ptr/smart_ptr.htm

编辑:从 ::weak_ptr 切换到 ::shared_ptr,因为我是个白痴...

于 2009-02-18T07:07:57.500 回答
4

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

于 2009-02-18T08:01:02.067 回答