Estoy escribiendo un contenedor C++/OOP para Lua. Mi código es:shared_ptr requiere un tipo completo; no puedo usarlo con lua_State *
class LuaState
{
boost::shared_ptr<lua_State> L;
LuaState(): L(luaL_newstate(), LuaState::CustomDeleter)
{
}
}
El problema es lua_State es de tipo incompleto y constructor shared_ptr requiere de tipo completo. Y necesito compartir el puntero de forma segura. (Lo más divertido es que los docs dicen que la mayoría de las funciones no requieren un tipo completo, pero el constructor lo requiere, así que no hay forma de usarlo. http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/smart_ptr.htm)
¿Puedo resolver esto? Gracias.
¿Por qué necesita compartir con seguridad el puntero, si puedo preguntar? ¿No puedes simplemente llamar a luaL_newstate en el constructor y a lua_close en el destructor? –
LuaState a, b; a = b; // lua_State en b nunca se lanzará // lua_State en a se lanzará dos veces La otra opción es clonar lua_State structure en copy constructor y operator =. Pero supongo que es una solución pesada. –
No puede clonar la estructura lua_State manualmente. Te explotará en tu cara. Lo he intentado :) –