Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/10/2008, 04:44
adryande
 
Fecha de Ingreso: octubre-2008
Mensajes: 3
Antigüedad: 15 años, 7 meses
Puntos: 0
Devolver objetos locales

Hola, soy nuevo en esto de C++ (aunque conozco C y Java), y la verdad que me esta costando asimilar ciertos conceptos.

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.