C++ Luabridge:返回C++;生命周期管理对象

C++ Luabridge:返回C++;生命周期管理对象,c++,binding,lua,luabridge,C++,Binding,Lua,Luabridge,此剪接适用于基本类型: int CreateBasicObject(lua_State *L) { int ret0; lua_pushinteger(L, ret0); return 1; } 在lua,它看起来是这样的: local NewObject=CreateBasicObject() self.MyObject=Screen.MyObject(); 我将如何进行返回课程而不是ints push(L,&MyObject); return 1;

此剪接适用于基本类型:

int CreateBasicObject(lua_State *L)
{
    int ret0;

    lua_pushinteger(L, ret0);

    return 1;
}
在lua,它看起来是这样的:

local NewObject=CreateBasicObject()
self.MyObject=Screen.MyObject(); 
我将如何进行返回课程而不是ints

push(L,&MyObject);
return 1;
似乎无法正常工作,lua部分如下所示:

local NewObject=CreateBasicObject()
self.MyObject=Screen.MyObject(); 
错误是:

attempt to index field 'MyObject' (a number value)
在该版本中,您可以使用
RefCountedPtr
,例如:

一些C++定义< /P>

struct A {};

static RefCountedPtr<A> SomeA() {
 return RefCountedPtr<A>(new A);
}

你是特别询问LuaBridge还是普通Lua?对于它的价值,我相信在尝试使用任何第三方绑定解决方案之前,应该尝试使用普通的LUA C API实现至少几个C++类。这有助于更好地理解这类东西(LuabReCH和类似的构建)是如何工作的。你好,德米特里,这是我们已经使用的,但是希望C++管理内存,所以不需要引用计数器指针。使用任何方法来创建C++生命周期管理对象而不需要ReavoPtR.Hi,GRAPES。您希望如何将对象传递给Lua?如果你想在Lua中创建它们,你必须使用RoopDeTePTR,如果不是,你可以把它们作为普通指针或引用传递,只是你应该关心你的C++对象的生命周期超过了它的潜在引用。并返回一个原始的C++指针,它不会被LUA垃圾收集,而不需要ReavePtR。有可能吗?它不会被垃圾回收,除非C++中的那个对象的引用被破坏了。我想,这正是你需要的。例如,如果将引用引用到C++代码中作为返回值或输入参数。请阅读本手册的共享生存期部分。LuabRip的目的之一是C++程序员从C++和Lua边界的终身管理关注点的解放。只是不处理原始指针,使用ReFrpPtR,它不会被意外地收集到:)Hello Dmitry,我们已经在整个程序中使用了RealDebug ObjuttPr,但是对于一些变量,比如C++,可以控制对象的生命周期。但作为函数中的返回值(如CreateBasicObject)。