c++ - 将 lua_error 与 LuaJIT 一起使用会跳过堆栈对象析构函数吗?
问题描述
根据 LuaJIT 官方网站,我已经用 MSVC x64 编译了 LuaJIT,这意味着应该有完整的 C++ 异常互操作性。
其中一点指出“跨 C++ 帧抛出 Lua 错误是安全的。将调用 C++ 析构函数。 ”
我假设这意味着我可以在 C++ 函数中使用lua_error而不必担心堆栈上的对象:
struct Test
{
Test() {std::cout<<"Constructor"<<std::endl;}
~Test() {std::cout<<"Destructor"<<std::endl;}
};
int some_function(lua_State *l)
{
Test t {};
lua_pushstring(l,"error message");
lua_error(l);
return 0;
}
(该函数在 Lua 脚本中调用)
但是,析构函数永远不会被调用。那么网站上的那个点实际上是什么意思呢?如何使用lua_error而不必担心内存泄漏?
根据this question,可以通过将Lua编译为C++代码来解决问题,但是由于我使用的是LuaJIT,我不确定这是否不会给我带来任何问题?
解决方案
推荐阅读
- kubernetes - Pod 无法在 Kubernetes 中分配大页面
- gatsby - 使用 Typography.js 和 Gatsby 的 Google 字体
- java - 如何使用二维数组调用函数
- r - 如何根据 R 中的条件获取日期的频率计数?
- java - 为什么我的字符串没有在 AsyncTask 中填充?
- apache - 当我在 docker-machine 中运行容器时,绑定挂载不起作用
- javascript - CSS边框时间动画
- laravel - 从 Laravel 5.8 的数据库中加载部分视图中的数据,并将该视图包含在主布局中
- python - 从可迭代打印可变长度的未打包项目
- ios - 反应原生地图标注按下未在 IOS 上触发