gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:56:27 32 4
gpt4 key购买 nike

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

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com