shared_ptr需要完整的类型; 不能用lua_State*

top*_*dev 8 c++ lua boost shared-ptr

我正在为Lua编写C++/OOP包装器.我的代码是:

class LuaState
{
     boost::shared_ptr<lua_State> L;

     LuaState(): L( luaL_newstate(), LuaState::CustomDeleter )
     {
     }
}
Run Code Online (Sandbox Code Playgroud)

问题是lua_State是不完整的类型,而shared_ptr构造函数需要完整的类型.我需要安全的指针共享.(有趣的事情提升文档说大多数函数不需要完整类型,但构造函数需要,因此无法使用它.http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/smart_ptr.htm)

我可以解决这个问题吗?谢谢.

Joh*_*itb 4

您正在使用自己的删除器,这意味着您不必在构造时拥有完整的类型。唯一的要求是CustomDeleter能够处理这个问题。(它可以将传递的指针转换为完整类型,例如(例如,从void*CompleteType*)。

完整性的背景是,一旦shared_ptr使用默认删除器调用 的构造函数,它将实例化一个包含该行的类delete p;- 并且为了使此代码正确,p一定不能不完整。析构函数将间接调用此删除器代码,因此它不依赖于类型的完整性。

但是,如果您传递自己的删除器,则您自己的删除器的要求将适用。请务必CustomDeleterlua_State完成后进行定义。