我想通过自己的方法销毁类实例.例如:
obj = Object()
obj:destroy()
type(obj) == nil
Run Code Online (Sandbox Code Playgroud)
对象在C上实现.有可能吗?
如果不可能,第二种方式是:
_G["obj"] = nil
collectgarbage()
Run Code Online (Sandbox Code Playgroud)
谢谢!
我想通过自己的方法销毁类实例.
你应该不惜一切代价避免这种情况.如果你绝对需要,只在Lua中公开一个显式的析构函数例程.
处理这个正确的方法是给你的Lua C对象与元表的__gc元方法.在Lua垃圾收集对象之前,将调用此元方法.
如果你绝对必须使用一个显式的析构函数(因为你希望用户能够在完成后立即释放昂贵的资源,而不必等待垃圾收集),那么你需要做两件事:
不要求用户明确销毁对象.也就是说,该对象应该能够通过析构函数或通过垃圾回收来销毁.
明确销毁时不要破坏对象.如果用户调用显式销毁函数,则获取此对象的每个函数(成员函数或自由函数)仍然需要工作.这些功能可能无济于事,这很好.但程序不应该崩溃.
基本上,当对象显然被销毁时,它仍然需要处于"活动"状态.你需要让对象成为一个僵尸:活着,但不是很有用.这样,即使它没有做正确的事情,你的程序仍然会起作用.
| 归档时间: |
|
| 查看次数: |
5916 次 |
| 最近记录: |