Devolver un puntero de una variable local C ++

Necesito crear una función que devuelva un puntero a un int.

Al igual que:

int * count() { int myInt = 5; int * const p = &myInt; return p; } 

Como un puntero es simplemente una dirección, y la variable myInt se destruye después de llamar a esta función. ¿Cómo declaro un int dentro de este método que mantendrá un lugar en la memoria para que pueda acceder más tarde a través del puntero devuelto? Sé que podría declarar el int globalmente fuera de la función, pero quiero declararlo dentro de la función.

¡Gracias de antemano por cualquier ayuda!

Use el nuevo operador

 int * count() { int myInt = 5; int * p = new int; *p = myInt; return p; } 

Como se señaló en otras respuestas, esta es generalmente una mala idea. Si debe hacerlo de esta manera, entonces quizás pueda usar un puntero inteligente. Consulte esta pregunta sobre cómo hacerlo. ¿Qué es un puntero inteligente y cuándo debo usar uno?

Podría usar punteros inteligentes.

Por ejemplo:

 unique_ptr count() { unique_ptr value(new int(5)); return value; } 

Luego puede acceder al número entero de la siguiente manera:

 cout < < "Value is " << *count() << endl; 

Puedes hacer esto haciendo que la variable sea static :

 int* count() { static int myInt = 5; return &myInt; } 

Es un error devolver un puntero a una variable local. x apunta a una variable asignada en el montón:

 link x = new node(a[m]); Thus x isn't pointing to a local variable. 

La razón por la que devolver un puntero a una variable local es un error es que dicha variable existe solo mientras la función esté activa (es decir, entre la entrada y la salida). Las variables asignadas en el montón (por ejemplo, con el uso del nuevo operador) existen hasta que se desasignan (por ejemplo, con el operador de eliminación).

Si desea devolver un puntero de una variable correctamente, tiene que hacer algo como.

int * myInt = new int(5);

Esta no es una variable local por cierto, lo que significa que no tiene almacenamiento automático y usted tiene que delete la memoria usted mismo

Sin embargo, el uso de punteros como este generalmente es innecesario y desaconsejable. Es mejor crear un int fuera de la función y hacer que la función tome una referencia.

 void count(int & i) { i = 5; } 

Por cierto, no sé cómo piensa utilizar la variable, pero dado que también sugirió utilizar una variable global, es posible que desee utilizar una var static que @JonathanPotter sugirió primero. En muchos sentidos, una variable estática es similar a una variable global (ambas tienen duraciones de almacenamiento estáticas)