2009-07-12 37 views
6

Ok, đây là vấn đề tôi đang gặp phải.Ràng buộc Lua với C++ và thu gom rác

Tôi có các liên kết Lua với công cụ hiển thị có trình quản lý kết xuất nội bộ theo dõi con trỏ của riêng nó cho cảnh hiển thị và quản lý chúng. Vấn đề là khi tôi đang sử dụng nó từ Lua, nếu tôi không giữ một tham chiếu Lua cho mỗi đối tượng duy nhất tôi thêm vào trình quản lý render C++, nó bắt đầu thu thập các con trỏ và tất nhiên gây ra sự cố. Tôi không đặc biệt muốn phải lưu mọi tham chiếu đơn lẻ vào mọi thứ tôi tạo ra. Có cách nào để buộc Lua không phải là rác thu thập những thứ nhất định? Có cách nào khác tôi có thể giải quyết vấn đề này không?

Tôi đang tạo liên kết Lua với SWIG.

Trả lời

9

Cách đơn giản để ngăn Lua khỏi việc thu thập rác một đối tượng là đặt đối tượng đó vào một bảng (gọi là uncollectable) và sau đó đặt bảng đó vào sổ đăng ký Lua.

Tùy chọn khác của bạn là sử dụng thêm mức độ vô hướng với mọi đối tượng Lua, tức là sử dụng "userdata nhẹ". Userdata ánh sáng trỏ đến một con trỏ tới đối tượng C++ và thậm chí nếu userdata ánh sáng được thu thập, đối tượng bên dưới vẫn không bị tổn thương.

Những giải thích này là khá ngắn gọn, nhưng tôi hy vọng với sự giúp đỡ của Programming in Lua, bạn có thể biến một thành mã làm việc.