Pessima idea restituire reference a oggetti stack based. E' vero che la memoria allocata sopravvive, ma il puntatore verrà perso all'uscita e di fatto ti ritrovi con un reference non valido, non potrai deallocare e il programma esplode.
In situazioni del genere si restituisce il puntatore.