Sí, esto dará un puntero colgante. Si desea que el valor persista, tiene un par de posibilidades. Una de ellas es que, como aparentemente desea devolver un valor, haga exactamente eso: devuelva el valor en lugar de un puntero. Otra es asignar el objeto involucrado con new y devolver un puntero a ese espacio dinámicamente asignado. Esto hace que eliminar el objeto sea responsabilidad de la persona que llama, sin embargo, lo que puede provocar fugas de memoria y cosas por el estilo.
Al final, generalmente quiere averiguar qué ámbito realmente necesita la variable, y que sea propiedad de algo (con más frecuencia un objeto) con ese alcance, por lo que se creará automáticamente al ingresar al alcance, y se destruye automáticamente al salir del alcance.
Si no puede hacer eso, aún necesita averiguar quién es el "propietario" del objeto y será responsable de destruirlo según sea necesario. De vez en cuando es difícil precisar, y necesita algo como un puntero de referencia para realizar un seguimiento de las cosas. Al menos en mi experiencia, estos se usan mucho más a menudo de lo que realmente deberían ser. He estado escribiendo C++ casi tanto como cualquiera fuera de AT & T, y aún no he necesitado un shared_ptr. Algunas veces, pensé que lo necesitaría, pero eventualmente descubrí que un diseño más limpio eliminaba el requisito.
No hay recolección de basura aquí. Solo apilate desenrollando. – Tom