Actualmente estoy entrando en C++ para la codificación de nivel inferior con OpenGL. Vengo de un entorno obsoleto pesado, así que tengo un poco de conocimiento sobre la administración de la memoria, pero parece que no puedo ver cómo la biblioteca "boost" maneja tipos de contenedores como ptr_vector
.¿Cómo gestiona ptr_vector la memoria?
Creo que mi problema está relacionado con el hecho de que no tengo idea de cómo ptr_vector
logra la destrucción de sí mismo y sus objetos.
favor, eche un vistazo al código siguiente:
// Header file
...
ptr_vector<IObject3D> objects;
...
// Implementation file
...
void ApplicationEngine::init()
{
WavefrontObject3D *object = new WavefrontObject3D("Ninja.obj");
objects.push_back(object);
}
...
Por lo tanto, para la realidad cuestionar: estoy creando una fuga aquí a través del "objeto" variable?
Estoy acostumbrado a retener y liberar mis objetos manualmente con llamadas explícitas en objc: Anteriormente había alloc init
a la WavefrontObject3D object
, agregarlo a una matriz y después release
ese mismo objeto de evitar fugas.
Pero cuando agrego un delete object
después de la llamada push_back
se llama al deconstructor del WavefrontObject3D object
. Esto me da una pista de que el ptr_vector
no conserva la variable object
. ¿Mi suposición es correcta?
adicional, pero relacionado, pregunta: digamos que quieren destruir la clase que contiene ApplicationEngine
no tengo que llamar a algún tipo de Deconstructor en el ptr_vector
o los elementos que administra?
'Pero cuando agrego un objeto delete después de la llamada push_back, se llama al deconstructor del objeto WavefrontObject3D. Bueno, eso es para lo que' delete' está hecho. Llama al destructor en la instancia a la que apunta el puntero. – Nobody
Creo que debería leer en [RAII] (http://stackoverflow.com/q/395123/20984), que es la forma en que la mayoría de la administración de memoria se realiza en el llamado "moderno" C++. –
Gran recurso @LucTouraille! Exactamente de la forma en que quería acercarme a C++. – polyclick