我正在为 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)
我能解决这个问题吗?谢谢。
最佳答案
您正在使用自己的删除器,这意味着您不必在构建时拥有完整的类型。唯一的要求是 CustomDeleter
可以处理它。 (它可能会将传递的指针转换为完整类型,例如(例如,从 void*
到 CompleteType*
)。
完整性的背景是,一旦使用默认删除器调用shared_ptr
的构造函数,它将实例化一个包含行 delete p;
的类 - 并且此代码要正确,p
不能不完整。析构函数将间接调用此删除代码,因此它不依赖于类型的完整性。
但是,如果您通过自己的删除器,则将适用您自己的删除器的要求。请务必在 lua_State
完成后定义 CustomDeleter
。
关于c++ - shared_ptr 需要完整的类型;不能与 lua_State 一起使用*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433667/