2013-08-27 33 views
1

我已經使用Luabind將一個類綁定到Lua。我需要確保在課程被破壞或通過myClass = nil使其空白時正確處置。如何在Lua和C++中正確清理類?

此類添加了自己內部本身的靜態列表如下:

template<typename T> 
class component : public componentInterface 
{ 
     public: 
       static std::list<componentInterface *> list; 
       component() : componentInterface() 
       { 
         di::component<T>::list.push_back(this); 
       } 
       ~component() 
       { 
         di::component<T>::list.remove(this); 
       } 
}; 

當調用析構函數它迅速地從列表中移除。

+0

複製構造函數呢? –

+0

當你在你的問題中說'class'時,你主要是指對象或實例 –

+0

@KarthikT是非常多。 – b28c92e5ff1

回答

2

你不需要做任何事情。只要Lua創建對象,或者Lua已經採用該對象,Luabind就會確保析構函數被調用。

但是,Lua被垃圾收集。這意味着析構函數在對象的最後一個引用被移除後不一定會被稱爲立即。的確,Lua可以無限期地等待,直到實際的lua_State對象被釋放。

如果更直接對你很重要,那麼你可以做下列之一:

  • 有Lua中可以調用早期破壞它的對象的dispose方法。因此,Lua的責任是而不是在進行此調用後使用該對象。

  • 執行垃圾回收器calling collectgarbage,以便收集垃圾。