Допустим, у меня есть такой класс:
class A
{
public:
A(){}
~A(){}
};
И выставить его в Lua через Luabind вот так:
module(luaState)
[
class_("Foo")
.def(constructor<>())
];
И, наконец, создайте его экземпляр в скрипте вроде этого:
A = Foo();
Каково фактическое «состояние существования» A в этот момент?
Это где-то в куче, и lua где-то хранит ссылку на него? (или luabind :: object?)
У меня такое чувство, что это может быть только указатель, например, выделенный new или эквивалентным.
Однако я могу привязать к lua функции, которые принимают ссылки, например lua_doSomething (A & a)
и то, что там окажется, будет реальной ссылкой.
Конечно, я знаю, что это может быть просто luabind, передающее a
как * a
, но я понятия не имею, как это происходит.
Я спрашиваю об этом, чтобы немного лучше понять и спрогнозировать время жизни объектов, созданных в сценарии.
Это и я не уверен, изменятся ли владения или время жизни, если вместо того, чтобы подвергать класс lua, как указано выше, я сделаю это следующим образом:
A * lua_CreateA()
{
return new A();
}
module(luaState)
[
class_("Foo")
];
module(luaState)
[
def("createA",&lua_CreateA)
];
И используя его как
A = createA();
По логике, которую я до сих пор понимаю, в этом случае мне потребуется выполнить очистку, поскольку я выделяю новый объект, если только подобное присваивание для luabind не будет таким же, как выполнение этого с связанный конструктор.
Короче говоря, я действительно сбит с толку насчет времени жизни объекта и прочего ... Я искал в Google ключевые слова, связанные с этим, но получаю только такие вещи, как http://www.gamedev.net/topic/525692-luabind-ownership-and-destruction/
Это не совсем то, что я хочу знать. Я хочу понять конкретный способ обработки вещей за кулисами, касающихся выделения, создания экземпляров, времени жизни и всего остального.