【发布时间】:2021-08-27 06:49:28
【问题描述】:
我想让我的引用计数 C++ 对象也在 Lua 回调中管理:当它被 Lua 变量持有时,增加它的引用计数;当 Lua 变量被销毁时,释放一个 refcount。 __gc元方法貌似可以自动执行释放端,但是增加端如何实现呢?
在将对象添加到 Lua 堆栈之前每次增加 refcount 是否合适&足够?
或者也许我应该new一个智能指针对象,在 Lua C 函数的任何地方使用它,然后在 __gc 元方法中删除它?这看起来很难看,好像 Lua 执行有问题并且没有调用 __gc,newed 智能指针对象将被泄漏,并且它所引用的 refcounted 对象将泄漏一个计数。
在我更熟悉的 Perl 中,这可以通过增加 XS Map 的 OUTPUT 部分的引用计数并减少销毁器的引用计数来实现。
【问题讨论】:
-
if something wrong with the Lua execution and the __gc is not called, ... would have leak one count- 这意味着你应该在 Lua VM 崩溃时终止你的应用程序。
标签: c++ lua reference-counting