我想實現一個簡單的發佈/訂閱模式,其中: html
單個發佈者向其訂閱者發佈令牌(指向對象的指針)。 發佈者和訂閱者都是獨立的線程。 我計劃爲每一個訂閱者添加線程安全隊列,以便Publisher能夠在處理令牌時繼續將訂閱源分發給訂閱者。 安全
正如您所看到的,這意味着全部訂閱者實際上共享相同的指針(注意:訂閱者不管如何都不能修改指向的對象,因此沒有問題)。 一旦共享指針再也不被任何訂閱者使用,若是指針在完成最後一個訂閱者線程後能夠自動刪除,那將是很是好的。 spa
這是一個使用智能指針的好地方嗎? 若是是這樣,我應該使用哪些智能指針? 線程
我使用MSVC2008在Windows上開發,並使用Intel TBB,Boost和Qt。 設計
若是我認爲你的設計是可行的(它在零上下文中聞起來頗有趣,但多是正確的),boost :: shared_ptr可能就是這樣。 指針
http://www.boost.org/doc/libs/1_38_0/libs/smart_ptr/smart_ptr.htm code
編輯:從:: weak_ptr切換到:: shared_ptr,由於我是個白癡...... htm
您描述的是用於對象生存期控制的經典COM模式。 你須要一個智能指針來保持對象的引用計數器 - boost::shared_ptr
, boost::intrusive_ptr
或ATL的CComPtr
類。 我建議使用shared_ptr
,由於其餘兩個將須要你本身實現ref計數。 對象