Continua ad esistere ma ci sono dei problemi.
All'interno della funzione create() , e' stato creato un oggetto referenziato dalla variabile "a".
Quando esegui il "return a;" ,viene semplicemente passato l'indirizzo dell'oggetto , la funzione viene terminata ma l'oggetto persiste ancora in memoria perche' e' stato creato nell'heap con "new".
Quindi :
A* create(){
A a = new A("ciao");
return a;
}
l'oggetto non viene distrutto alla terminazione della funzione , ma chi chiama la funzione create() deve sapere e ricordarsi di distruggere l'oggetto referenziato.
Se non si ricorda si crea un memory-leak.
A create(){
A a("ciao");
return a;
}
Invece in questo caso quando la funzione termina , l'oggetto instanziato "a" , viene distrutto , ma prima viene chiamato il costruttore di copia che crea una copia per il return.