作者wowtiger (小虎)
看板C_and_CPP
標題Re: [問題] 關於Loki::Singleton 的解構
時間Sun Jul 12 01:53:25 2009
※ 引述《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