Estaba pensando que cuando una función devuelve un objeto en la pila a la función de llamada, la función de llamada obtiene una copia del objeto original, pero se llama al destructor del objeto original tan pronto como la pila se desenrolla. Pero en el siguiente programa, el destructor se llama solo una vez. Esperaba que se llamara dos veces.¿Por qué no se llama al destructor para el objeto devuelto de la función?
#include <iostream>
class MyClass
{
public:
~MyClass() { std::cout << "destructor of MyClass" << std::endl; }
};
MyClass getMyClass()
{
MyClass obj = MyClass();
return obj; // dtor call for obj here?
}
int main()
{
MyClass myobj = getMyClass();
return 0; // Another dtor call for myobj.
}
Pero "destructor de MyClass" solo se imprime una vez. ¿Está equivocada mi suposición o hay algo más que está sucediendo aquí?
¿Por qué escribe: "MyClass obj = MyClass();" ? "MyClass obj;" lo hará bien. Esto no es java;). –
Sí, es debido a una programación mucho en Java antes :) – Srikanth
@EvanTeran "_¿Por qué escribes:" MyClass obj = MyClass(); "?" MyClass obj; "funcionará bien_" estos son ** no ** equivalente en general. – curiousguy