c++ - shared_ptr 需要完整的类型;不能与 lua_State 一起使用*

标签 c++ boost lua shared-ptr

我正在为 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/

相关文章:

c++ - 如何在模板与 union 之间继承?

c++ - io_context 并发提示 (BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO)

lua - lua中如何获取数组的大小

python - MySQL 数据库 : lua or python

c++ - 为什么我不能在模板中返回数组的第一个元素?

c++ - Cuda 工具包目录不存在

c++ - VS2010 构建了一个 exe 但无法调试它提示找不到它

c++ - 对 `boost::system::system_category()' 的 undefined reference

c++ - 将 adjacency_list 复制到不同的 VertexList 和 EdgeList 模板

arrays - 如何在 Lua 中对多维表进行排序?