用他的方法破坏lua对象

And*_*din 5 oop lua

我想通过自己的方法销毁类实例.例如:

obj = Object()
obj:destroy()
type(obj) == nil
Run Code Online (Sandbox Code Playgroud)

对象在C上实现.有可能吗?

如果不可能,第二种方式是:

_G["obj"] = nil
collectgarbage()
Run Code Online (Sandbox Code Playgroud)

谢谢!

Nic*_*las 5

我想通过自己的方法销毁类实例.

你应该不惜一切代价避免这种情况.如果你绝对需要,只在Lua中公开一个显式的析构函数例程.

处理这个正确的方法是给你的Lua C对象与元表__gc元方法.在Lua垃圾收集对象之前,将调用此元方法.

如果你绝对必须使用一个显式的析构函数(因为你希望用户能够在完成后立即释放昂贵的资源,而不必等待垃圾收集),那么你需要做两件事:

  1. 要求用户明确销毁对象.也就是说,该对象应该能够通过析构函数或通过垃圾回收来销毁.

  2. 明确销毁时不要破坏对象.如果用户调用显式销毁函数,则获取此对象的每个函数(成员函数或自由函数)仍然需要工作.这些功能可能无济于事,这很好.但程序不应该崩溃.

    基本上,当对象显然被销毁时,它仍然需要处于"活动"状态.你需要让对象成为一个僵尸:活着,但不是很有用.这样,即使它没有做正确的事情,你的程序仍然会起作用.