Re: [問題] 關於Loki::Singleton 的解構

看板C_and_CPP (C/C++)作者 (小虎)時間16年前 (2009/07/12 01:53), 編輯推噓0(004)
留言4則, 2人參與, 最新討論串6/6 (看更多)
※ 引述《adxis (acer)》之銘言: : // 完整(修正) : #include <vector> : #include "loki/Singleton.h" : #include "loki/SmartPtr.h" : : class Obj{ : std::vector< Loki::SmartPtr<Obj> > innerCont; : Obj(){} : ~Obj(){} : public: : void Add(){ : Loki::SmartPtr<Obj> sp = new Obj; : innerCont.push_back(sp); : } : }; : typedef Loki::SingletonHolder< Obj > SingletonObj; : int main() : { : SingletonObj::Instance().Add(); SingletonObj::Destory(); 記得這種玩法 必須要做這樣處理 沒有處理的話 在 VC++ 那邊的 _at_exit() 會作這類 global destory 而 crash 在這邊 另外我不清楚你的 SmartPtr 有沒有作 atomic inc/dec... : return 0; : } 另外這段 : void Buggy(){ : Loki::SmartPtr<Obj> cur = this; cur.RefCount == 1 離開這個 scope 後 RefCount -1 RefCount == 0 時 砍掉 this 這是自殺行為 : // 然後離開這個 scope 的時候就被解構了 QQ : // 應該是直接用 this assign 的後果吧 : // 所以其實跟 Singleton 沒啥關係 0rz : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.196.46 ※ 編輯: wowtiger 來自: 114.42.196.46 (07/12 01:54)

07/12 02:13, , 1F
囧 有這種事情 我好像沒遇到耶
07/12 02:13, 1F

07/12 02:27, , 2F
阿 是把 SingletonObj = NULL; 這樣 at_exit 就不會跑了
07/12 02:27, 2F

07/12 02:31, , 3F
唉 沒看清楚 而且也看不到妳的 singleton 實作部分
07/12 02:31, 3F
※ 編輯: wowtiger 來自: 114.42.196.46 (07/12 02:34)

07/12 02:51, , 4F
看完 loki::singleton... 難怪不需要 destoryinstance
07/12 02:51, 4F
文章代碼(AID): #1AMD6MzG (C_and_CPP)
文章代碼(AID): #1AMD6MzG (C_and_CPP)