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