Hãy nói rằng tôi có một lớp học như thế này:Cần giúp đỡ để hiểu thế nào luabind instantiates lớp
class A
{
public:
A(){}
~A(){}
};
Và tiếp xúc với Lua qua Luabind như thế này:
module(luaState)
[
class_<A>("Foo")
.def(constructor<>())
];
Và cuối cùng nhanh chóng nó trong một kịch bản như thế này:
A = Foo();
'Trạng thái tồn tại' thực tế của A tại điểm đó là gì?
Ở đâu đó trong heap, và lua giữ một tham chiếu đến nó ở đâu đó? (hoặc một đối tượng :: luabind?)
Tôi có cảm giác rằng nó chỉ có thể là một con trỏ, như được phân bổ theo mới hoặc tương đương.
Tuy nhiên, tôi có thể liên kết các hàm với lua chấp nhận tham chiếu, như lua_doSomething(A & a)
và những gì kết thúc trong đó sẽ có tham chiếu thực tế. Cấp cho tôi biết điều này rất có thể chỉ là luabind đi qua a
là *a
, nhưng tôi không có ý tưởng nếu đó là cách nó xảy ra.
Lý do tôi yêu cầu điều này là để hiểu và dự đoán thời gian tồn tại của các đối tượng được diễn đạt trong một kịch bản tốt hơn một chút.
đó, và tôi là không chắc chắn nếu quyền sở hữu hoặc kiếp thay đổi nếu, thay vì phơi bày lớp để Lua như trên, tôi làm điều đó như thế này:
A * lua_CreateA()
{
return new A();
}
module(luaState)
[
class_<A>("Foo")
];
module(luaState)
[
def("createA",&lua_CreateA)
];
Và sử dụng nó như
A = createA();
Bởi logic tôi hiểu cho đến nay, trường hợp này sẽ yêu cầu tôi làm sạch vì tôi là người phân bổ một đối tượng mới, trừ khi gán như thế này cho luabind sẽ giống như làm nó với constructor bị ràng buộc.
Nói tóm lại, tôi thực sự thực sự bối rối về đời đối tượng và các công cụ ở đây ... Tôi googled cho các từ khóa liên quan đến điều này, nhưng tôi chỉ nhận được những thứ như thế http://www.gamedev.net/topic/525692-luabind-ownership-and-destruction/
Mà không phải là thực sự những gì tôi muốn biết. Tôi muốn hiểu cách cụ thể cách mọi thứ được xử lý đằng sau hậu trường liên quan đến phân bổ, khởi tạo, cuộc đời và tất cả những điều đó.