probé el siguiente programa en Visual Studio 2010.C++ comportamiento destructor
#include <iostream>
using namespace std;
class A {
public:
int p;
/*A(){
cout << "Constructor A" << endl;
}*/
~A(){
cout << "Destructor in A" << endl;
}
};
class D: public A
{
public:
/*D(){
cout << "Constructor D" << endl;
}*/
~D(){
cout << "Destructor in D" << endl;
}
};
int main()
{
D d = D();
cout << "Exiting main" << endl;
}
La salida que me dieron fue -
Destructor in D
Destructor in A
Exiting main
Destructor in D
Destructor in A
no soy capaz de entender por qué el destructor de la clase D y A se llaman antes de ejecutar la instrucción "Salir principal"?
he intentado otra cosa - que sin comentar el constructor de la clase D en el código anterior, la salida fue como yo esperaba -
Constructor D
Exiting main
Destructor in D
Destructor in A
Qué me estoy perdiendo aquí?
No explica por qué el segundo ejemplo ya no imprime las llamadas al destructor. – Xeo
Se podría decir cómo debería ser (: –
El compilador solo puede realizar optimizaciones inobservables. Aunque copie elisión, la llamada aún se debe imprimir. – Xeo