Me ha surgido una duda y necesito vuestra ayuda, aqui va.
Probando cosas, he descubierto que el siguiente fragmento de codigo funciona:
class ClaseEj{} //Clase vacia
ClaseEj funcion(){
ClaseEj ret; //Llama al constructor por defecto
return ret;}
int main(...){
ClaseEj objeto=funcion();}
Es decir, asigno a un objeto declarado en main, otro objeto que declare en una funcion y que deberia ser local.
Sin embargo, C++ no llama al destructor de ese objeto local sino que al asignarlo al objeto declarado en main me deja utilizarlo fuera de su ambito.
Nota: (He comprobado que ni siquiera hay llamadas al operador= o al constructor copia de ClaseEj)
Incluso si cambiamos el codigo de main por:
int main(...){
ClaseEj objeto;
objeto=funcion();}
Tambien funciona, en este caso llamando al operator= y copiando el objeto local en el objeto declarado en main, para una vez copiado, destruirlo.
La duda es: ¿Este funcionamiento es "lo normal" en C++ o es un apaño del compilador y por tanto no se puede esperar el mismo comportamiento siempre?
Muchas gracias, un saludo.