在 Lua 的垃圾收集器中,对于被收集的对象,需要调用析构函数。

我知道 Lua 是一种带有垃圾收集的语言。我知道 Lua 可以通过 userdata 处理 C 对象。

我的问题是:是否有任何方法可以注册函数,以便在 Lua 对 C userdata 对象进行垃圾回收时调用该函数?[基本上是一个析构函数]。

谢谢!

原文链接 https://stackoverflow.com/questions/2744306

点赞
stackoverflow用户1491
stackoverflow用户1491

是的, Lua 中有一个叫做 __gc元方法专门用于这个目的。请参见 Programming in Lua (PIL)第 29 章 - 管理资源 了解更多详细信息。

下面的代码片段创建了一个元表,并注册了一个 __gc 元方法回调:

  luaL_newmetatable(L, "SomeClass");

  lua_pushcfunction(L, some_class_gc_callback);
  lua_setfield(L, -2, "__gc");
2010-04-30 13:39:46