Digamos que tengo una clase como esta:necesita ayuda para entender cómo luabind instancia clases
class A
{
public:
A(){}
~A(){}
};
y exponerla a Lua través Luabind así:
module(luaState)
[
class_<A>("Foo")
.def(constructor<>())
];
Y por último una instancia en un script como este:
A = Foo();
¿Cuál es el 'estado de existencia' real de A en ese punto?
¿Está en algún lugar en el montón, y lua guarda una referencia en algún lugar? (o un luabind :: objeto?)
Tengo la sensación de que solo puede ser un puntero, como en, asignado por nuevo o equivalente.
Sin embargo, puedo vincular funciones a lua que acepten referencias, como lua_doSomething(A & a)
y lo que termine allí será una referencia real. De acuerdo, sé que esto podría muy bien simplemente ser luabind pasando a
como , pero no tengo idea de si así es como sucede.
La razón por la que estoy preguntando esto es para comprender y predecir un poco mejor la vida útil de los objetos instanciados en un script.
Eso, y que yo esté seguro si titularidades o vidas cambian si, en lugar de exponer a la clase a la LUA como la de arriba, lo hago de esta manera:
A * lua_CreateA()
{
return new A();
}
module(luaState)
[
class_<A>("Foo")
];
module(luaState)
[
def("createA",&lua_CreateA)
];
Y su uso como
A = createA();
Por la lógica que entiendo hasta ahora, este caso me obligaría a hacer la limpieza ya que soy el que asigna un nuevo objeto, a menos que una tarea como esta para luabind sea lo mismo que hacerla con el constructor encuadernado.
En resumen, estoy realmente confundido acerca de duración de los objetos y cosas por aquí ... Busqué en Google para las palabras clave relacionadas con esto, pero yo sólo estoy haciendo cosas por el estilo http://www.gamedev.net/topic/525692-luabind-ownership-and-destruction/
Lo cual no es realmente lo que quiero saber Quiero entender la forma concreta de cómo se manejan las cosas detrás de escena con respecto a la asignación, instanciación, vida y todo eso.