看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)
adxis:囧 有這種事情 我好像沒遇到耶 07/12 02:13
wowtiger:阿 是把 SingletonObj = NULL; 這樣 at_exit 就不會跑了 07/12 02:27
wowtiger:唉 沒看清楚 而且也看不到妳的 singleton 實作部分 07/12 02:31
※ 編輯: wowtiger 來自: 114.42.196.46 (07/12 02:34)
wowtiger:看完 loki::singleton... 難怪不需要 destoryinstance 07/12 02:51