作者: luckiejacky 時間: 2015-1-11 11:18 標題: 點解Singleton在multi-threaded environment 唔好
本帖最後由 luckiejacky 於 2015-1-11 11:23 編輯
http://lostechies.com/scottdensmore/2009/08/14/singletons-are-evil-part-2/
C++
我寫左個Singleton class在multi-threaded 環境下有Memory Leak
我在main logic (Application class 內的Destructor destroy 個Singleton
內的Heap objects) 都系有Leak,有什麼方法可以今個program robust D?
- class NavmeshSingleton
- {
- public:
- virtual ~NavmeshSingleton()
- {
- delete m_pObj;
- delete m_NavMesher;
- }
-
- // use this object to get obj
- static NavmeshSingleton* GetObj()
- {
- if (!m_pObj) {
- m_pObj = new NavmeshSingleton();
-
- }
- return m_pObj;
- }
- static void SetObj(NavmeshSingleton* pObj)
- {
- m_pObj = pObj;
- }
-
- private:
- static NavmeshSingleton* m_pObj;
- static NavMesher *m_NavMesher;
- private:
- NavmeshSingleton()
- {
- m_NavMesher = new NavMesher();
- m_NavMesher->buildNavMesh(((CWarehouse*)g_Objs["Warehouse"])->m_Mesh->GetMesh());
- }
- public:
- void findPath(const D3DXVECTOR3& from, const D3DXVECTOR3& to, std::vector<D3DXVECTOR3>& path) {
- m_NavMesher->findPath(from, to, path);
- }
- };
THX
作者: luckiejacky 時間: 2015-1-11 12:12
Okay, I explicitly delete the m_NavMesher and m_pObj;
in the main logic class.
And seems not leaking any more
作者: goldbug23 時間: 2015-1-12 10:58
回覆 2# luckiejacky
可以用std::unique_ptr.
還有要用atomic或mutex去access.
