Tôi đang viết một trình bao bọc C++/OOP cho Lua. Mã của tôi là:shared_ptr yêu cầu loại hoàn chỉnh; không thể sử dụng nó với lua_State *
class LuaState
{
boost::shared_ptr<lua_State> L;
LuaState(): L(luaL_newstate(), LuaState::CustomDeleter)
{
}
}
Vấn đề là lua_State là kiểu không đầy đủ và hàm tạo shared_ptr yêu cầu loại hoàn chỉnh. Và tôi cần chia sẻ con trỏ an toàn. (Tài liệu tăng cường vui vẻ nói hầu hết các chức năng không yêu cầu loại hoàn chỉnh, nhưng hàm tạo yêu cầu, vì vậy không có cách nào để sử dụng nó. http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/smart_ptr.htm)
Tôi có thể giải quyết vấn đề này không? Cảm ơn bạn.
Tại sao bạn cần chia sẻ con trỏ an toàn, nếu tôi có thể yêu cầu. Không thể bạn chỉ cần gọi luaL_newstate trong constructor và lua_close trong destructor. –
LuaState a, b; a = b; // lua_State in b sẽ không bao giờ được phát hành // lua_State trong một bản sẽ được phát hành hai lần Tùy chọn khác là nhân bản cấu trúc lua_State trong hàm tạo bản sao và toán tử =. Nhưng tôi cho rằng đó là giải pháp nặng. –
Bạn không thể sao chép cấu trúc lua_State theo cách thủ công. Nó sẽ nổ tung trên khuôn mặt của bạn. Tôi đã thử nó :) –