Hace unas horas estaba jugando con un problema de pérdida de memoria y resultó que realmente tenía algunas cosas básicas acerca de los destructores virtuales mal! Déjame explicar el diseño de mi clase.¿Cómo funcionan los destructores virtuales?
class Base
{
virtual push_elements()
{}
};
class Derived:public Base
{
vector<int> x;
public:
void push_elements(){
for(int i=0;i <5;i++)
x.push_back(i);
}
};
void main()
{
Base* b = new Derived();
b->push_elements();
delete b;
}
La herramienta de comprobación de límites informó una pérdida de memoria en el vector de clase derivado. Y descubrí que el destructor no es virtual y no se llama al destructor de clase derivado. Y sorprendentemente se corrigió cuando hice el destructor virtual. ¿No se desasigna automáticamente el vector incluso si no se llama al destructor de clase derivado? ¿Es eso una rareza en la herramienta BoundsChecker o mi comprensión del destructor virtual es incorrecta?
No formatee su código con HTML. Seleccione y presione el botón '0101' que lo sangrará por 4 espacios. – Yacoby
el código como se publicó no tiene relación entre Base y Derivados – JRL
@JRL: Gracias. Derived se deriva de Base. He realizado el cambio. – Prabhu