gpt4 book ai didi

oop - 用他的方法销毁lua对象

转载 作者:行者123 更新时间:2023-12-04 17:38:15 24 4
gpt4 key购买 nike

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

obj = Object()
obj:destroy()
type(obj) == nil

对象是在 C 上实现的。这可能吗?

如果不可能,第二种方法是:
_G["obj"] = nil
collectgarbage()

谢谢!

最佳答案

I want to destroy class instance by its own method.



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

处理这个问题的正确方法是给你的 Lua C 对象一个带有 an __gc metamethod 的元表。 .这个元方法将在 Lua 垃圾收集对象之前被调用。

如果您绝对必须使用显式析构函数(因为您希望用户能够在完成后立即释放昂贵的资源,而无需等待垃圾回收),那么您需要做两件事:
  • 不要要求 用户显式销毁对象。也就是说,对象应该能够通过析构函数或垃圾收集来销毁。
  • 当对象被显式销毁时,不要破坏它。如果用户调用了显式销毁函数,那么每个接受这个对象的函数(成员函数或自由函数)都需要继续工作。这些函数可能什么都不做,这很好。但程序不应该崩溃。

    基本上,您的对象在被显式销毁时仍需要处于“事件”状态。你需要让对象成为僵尸:活着,但不是很有用。这样,即使您的程序没有做正确的事情,它仍然可以运行。
  • 关于oop - 用他的方法销毁lua对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11359180/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com