enable_shared_from_this
針對上次的問題,this指標的暴露依照前面的解法應該用shared_ptr來解決,但get()本身是個成員函式,如何獲得乙個指向當前物件的shared_ptr物件呢?
可以使用enable_shared_from_this。這是乙個以其派生類為模板型別實參的基類模板,繼承它,this指標就能變身為shared_ptr。
class stockfactory:public boost::enable_shared_from_this,boost::noncopyable
{};
為了使用shared_from_this(),stockfactory不能時stack object,必須是heap object且由shared_ptr管理其生命期,即
shared_ptrstockfactory(new stockfactory);
然後就可以把this換為shared_from_this()了。
shared_ptrstockfactory::get(const string& key)
return pstock;
}
這其中,shared_from_this()不能在建構函式裡呼叫,因為它是在new完後才交給shared_ptr接管它的。最後乙個問題,stockfactory的生命期被延長了。 執行緒安全的物件生命期管理
1.當析構函式遇到多執行緒 在即將析構乙個物件時,別的執行緒是否正在執行該物件的成員函式?如何保證在執行成員函式期間,物件不在另乙個執行緒被析構?在呼叫某個成員函式之前,如何確保物件還活著?析構函式會不會執行到一半?1.1執行緒安全類 多個執行緒同時訪問,表現出正確的行為 無論作業系統如何排程這些執...
muduo 執行緒安全的物件生命期管理
六 系統地避免各種指標錯誤 七 shared ptr 技術與陷阱 八 小結 當乙個物件能被多個執行緒同時看到時,那麼物件的銷毀時機就會變得模糊不清,可能出現多種競態條件 race condition 解決這些race condition是 c 多執行緒程式設計面臨的基本問題。本文試圖以shared ...
執行緒安全的物件生命期管理(三)
c 裡可能出現的記憶體問題大致有這麼幾個方面 1 緩衝區溢位 2 空懸指標 野指標 3 重複釋放 4 記憶體洩漏 5 不配對的new delete 6 記憶體碎片 正確使用智慧型指標能很容易地解決前面5個問題。1 緩衝區溢位 用vector string或自己編寫buffer class來管理緩衝區...