Ok, he buscado este problema y he buscado el desbordamiento de pila, pero parece que no puedo encontrar una buena respuesta. Entonces, estoy haciendo la pregunta aquí que es particular para mi problema. Si es una respuesta fácil, se agradable, soy nuevo en el lenguaje. Aquí está mi problema:Devolviendo una copia del auto de un objeto en C++
Estoy tratando de escribir un método para una clase de C++ que está sobrecargando un operador. Quiero devolver una copia de la instancia modificada, pero no la instancia en sí. Para facilitar el ejemplo, usaré una clase BigInt
para demostrar el problema que estoy teniendo.
Si tuviera el siguiente código:
const BigInt & operator+() const //returns a positive of the number
{
BigInt returnValue = *this; //this is where I THINK the problem is
returnValue.makepositve(); //for examples sake
return returnValue;
}
me sale el error de que el valor de retorno puede haber sido creado en la pila. Sé que esto significa que tengo que crear el objeto en el montón y devolver la referencia. Pero si tuviera que cambiar la línea 3rd a algo como:
BigInt & returnValue = *this;
me sale un error que me dice que la sintaxis no es correcta. No estoy seguro de qué hacer, ¡cualquier ayuda es muy apreciada!
ok, así que si devuelvo el objeto completo, ¿el objeto debe crearse en el montón? –
No, puedes crearlo en la pila. –
No, c/C++ copie el valor de retorno del marco de pila llamado al anterior. Básicamente lo que eso significa es que, cuando no tienes un puntero, el objeto se copia cuando se devuelve. (Los primitivos como punteros también se 'copian', pero no lo notarás porque apuntan al mismo objeto.) –