#include<iostream>
using namespace std;
class A{
public:
static int cnt;
A()
{
++cnt;
cout<<"constructor:"<<cnt<<endl;
}
~A()
{
--cnt;
cout<<"destructor:"<<cnt<<endl;
}
};
int A::cnt = 0;
A f(A x){
return x;
}
int main(){
A a0;
A a1 = f(a0);
return 0;
}
El programa de la Salida:¿Por qué mi destructor parece ser llamado con más frecuencia que el constructor?
constructor:1 destructor:0 destructor:-1 destructor:-2
El constructor y el destructor no aparecen en pares?
¡Bienvenido a Stack Overflow! +1 y gracias por proporcionar un programa de muestra completo. Ver http://SSCCE.ORG para saber por qué eso fue importante. –
El contructor de copia invocado por 'return x;' aparentemente ya está optimizado, pero me pregunto si un optimizador suficientemente agresivo podría eliminar la invocación al invocar 'f' (' x' se pasa por valor) también. Para que efectivamente llame al destructor predeterminado una vez y luego al constructor de copia una vez. –
@FrerichRaabe: esa optimización no se ajustaría al estándar, lo que permite la elisión del constructor de copias solo en ciertas circunstancias. En todas las circunstancias permitidas, la fuente o el destino de la copia eliminada es temporal. –