你好,我一直使用这个库来完成C++和Lua的交互,确实很方便.
现在,我遇到一个问题:
我注册的C++函数会返回一个 对象, 我需要将这个对象的所有权交给Lua管理,在lua中不使用时就将其内存释放, 例如我注册的函数为:
class BlockDataObject
{
public:
EntityBlockIndex* indexWithCode(QString code);
...
注册函数的方法为:
ELuna::registerClass<EntityBlockIndex>(L, "BlockIndex", ELuna::constructor<EntityBlockIndex,QmtExchangeId,QString,QString,int,QString,bool>);
ELuna::registerMethod<EntityBlockIndex>(L, "code", &EntityBlockIndex::code);
ELuna::registerMethod<EntityBlockIndex>(L, "name", &EntityBlockIndex::name);
ELuna::registerMethod<EntityBlockIndex>(L, "type", &EntityBlockIndex::type);
....
ELuna::registerClass<BlockDataObject>(L, "BlockDataObject", ELuna::constructor<BlockDataObject,QString,ELuna::LuaTable>);
ELuna::registerMethod<BlockDataObject>(L, "indexWithCode", &BlockDataObject::indexWithCode);
....
indexWithCode方法的返回值需要交给Lua去管理, 否则就内存泄露了. 我发现咱库中有一个函数:
template<typename T>
inline int inject(lua_State *L, T* objPtr) {
UserGCData<T>* ud = static_cast<UserGCData<T>*>(lua_newuserdata(L, sizeof(UserGCData<T>)));
new(ud) UserGCData<T>(objPtr);
luaL_getmetatable(L, ClassName<T>::getName());
lua_setmetatable(L, -2); // self.metatable = uniqe_metatable
return 1;
}
它可以将我要返回的对象包装成 UserGCData实现我的效果, 但是我注册的函数indexWithCode的返回值要怎么改?
我现在卡在这里了, 不知道要怎么继续了,还望大佬能给解惑~
你好,我一直使用这个库来完成C++和Lua的交互,确实很方便.
现在,我遇到一个问题:
我注册的C++函数会返回一个 对象, 我需要将这个对象的所有权交给Lua管理,在lua中不使用时就将其内存释放, 例如我注册的函数为:
indexWithCode方法的返回值需要交给Lua去管理, 否则就内存泄露了. 我发现咱库中有一个函数:
它可以将我要返回的对象包装成 UserGCData实现我的效果, 但是我注册的函数indexWithCode的返回值要怎么改?
我现在卡在这里了, 不知道要怎么继续了,还望大佬能给解惑~