3

単純なパブリッシュ/サブスクライブパターンを実装したいと思います。

単一のパブリッシャーは、そのサブスクライバーにトークン(オブジェクトへのポインター)を公開します。パブリッシャーとサブスクライバーはすべて独立したスレッドです。サブスクライバーがトークンを処理している間、パブリッシャーがトークンをサブスクライバーに配布し続けることができるように、各サブスクライバーにスレッドセーフキューを追加する予定です。

ご覧のとおり、これはすべてのサブスクライバーが実際に同じポインターを共有していることを意味します(注:サブスクライバーはとにかくポイントされたオブジェクトを変更できないため、問題はありません)。共有ポインターがどのサブスクライバーによっても使用されなくなったら、最後のサブスクライバースレッドが使用された後、ポインターがそれ自体を自動削除できると非常に便利です。

これはスマートポインタを使用するのに適した場所ですか?もしそうなら、私はどのスマートポインタを使うべきですか?

私はMSVC2008を使用してWindowsで開発し、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 に答える