将多个Lua状态存储在Boost shared_ptr中

我以前没有使用过 Boost,如果我做了什么愚蠢的事,请原谅我。我有一个持有 lua_State 的类。我有一个 boost::shared_ptr 向量,我使用 push_back 新状态,就像这样:

代码可以运行,Lua 状态被添加,但是几秒钟后应用程序会崩溃。我不知道为什么会发生这种情况。当我手动执行时(没有共享指针和手动取消引用),它运行得很好。

点赞
用户1774667
用户1774667

将下面翻译成中文并且保留原本的 markdown 格式

你违反了“三法则”(Rule of 3)。你在未禁用或编写复制构造函数和 operator= 的情况下创建了一个复杂的析构函数和分配构造函数。

可能当你创建 shared_ptr 时,你正在复制上面的类。然后临时对象被丢弃,事情就崩了。

因此,首先禁用 LuaState::operator=(LuaState const&)LuaState(LuaState const&) 构造函数(创建一个私有的未实现版本,或在 C++11 中 delete 它),或者实现它。

接下来,使用 make_shared<LuaState>() 创建 shared_ptr<LuaState> 实例。这将“就地”创建它们并删除副本。

  1. 什么是我提到的三法则?参见这些链接:三法则(Wikipedia)什么是三法则?
2012-12-06 16:17:57