Нужна помощь в понимании того, как luabind создает экземпляры классов

Допустим, у меня есть такой класс:

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/

Это не совсем то, что я хочу знать. Я хочу понять конкретный способ обработки вещей за кулисами, касающихся выделения, создания экземпляров, времени жизни и всего остального.

5
задан Erius 14 August 2011 в 20:10
поделиться