【发布时间】:2011-01-26 21:08:30
【问题描述】:
我正在为 Lua 编写 C++/OOP 包装器。我的代码是:
class LuaState
{
boost::shared_ptr<lua_State> L;
LuaState(): L( luaL_newstate(), LuaState::CustomDeleter )
{
}
}
问题是 lua_State 类型不完整,shared_ptr 构造函数需要完整类型。我需要安全的指针共享。 (有趣的是 boost 文档说大多数函数不需要完整的类型,但构造函数需要,所以没有办法使用它。http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/smart_ptr.htm)
我能解决这个问题吗?谢谢。
【问题讨论】:
-
如果我可能会问,为什么需要安全指针共享。你不能只在构造函数中调用 luaL_newstate 并在析构函数中调用 lua_close。
-
LuaState a, b; a = b; // b 中的 lua_State 将永远不会被释放 // a 中的 lua_State 将被释放两次 另一种选择是在复制构造函数和 operator= 中克隆 lua_State 结构。但我想这是一个沉重的解决方案。
-
您不能手动克隆 lua_State 结构。它会在你的脸上炸开。我试过了:)
-
我就是这么想的。 :) 那么,安全管理 lua_State* 的解决方案是什么?
标签: c++ boost lua shared-ptr