【发布时间】:2013-02-08 21:12:58
【问题描述】:
我正在尝试从与 Luabind 绑定的方法返回 std::shared_ptr,但它似乎无法识别类型。
Luabind 代码:
module(lua)
[
class_<Character, BaseEntity, std::shared_ptr<Character> > ("Character"),
def("createCharacter", &Character::createCharacter)
];
创建字符代码:
std::shared_ptr<Character> Character::createCharacter(Game* gameInstance, const Character::CharacterSetup& characterSetup, string sprite, b2World* world)
{
return std::shared_ptr<Character>(new Character(gameInstance, characterSetup, sprite, world));
}
如果我在 Lua 脚本中调用此方法,则不会返回任何内容,并且执行会停在那里。但是,如果我将方法更改为返回 Character*,它会按预期工作。一些谷歌搜索告诉我返回 shared_ptr 应该不是问题。
我做错了什么?
另外,我有这段代码,所以 Luabind 可以理解 std::shared_ptr:
namespace luabind
{
template <typename T>
T* get_pointer(std::shared_ptr<T> const& p)
{
return p.get();
}
}
【问题讨论】:
-
你试过
boost::shared_ptr<T>吗? -
我对luabind不太熟悉,但是如果它不存储共享指针而只是使用get_pointer()来获取真正的指针,它会丢弃最后一个引用(从而删除对象) 而它保持(现在悬空的)指针。首先,确保您的课程正确地不可复制。其次,给构造函数和析构函数添加断点。
标签: c++ lua shared-ptr luabind