Ok, quindi ho cercato su Google questo problema e ho cercato lo stack overflow ma non riesco a trovare una buona risposta. Quindi, sto facendo la domanda qui che è particolare al mio problema. Se è una risposta facile, per favore sii gentile, sono nuovo della lingua. Ecco il mio problema:Restituzione di una copia di un oggetto in C++
Sto provando a scrivere un metodo per una classe C++ che sta sovraccaricando un operatore. Voglio restituire una copia dell'istanza modificata ma non l'istanza stessa. Per semplicità di esempio, userò una classe BigInt
per dimostrare il problema che sto avendo.
Se ho avuto il seguente codice:
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;
}
ottengo l'errore che il valore di ritorno potrebbe essere stato creato in pila. So che questo significa che devo creare l'oggetto sull'heap e restituire il riferimento. Ma se dovessi cambiare la 3 ° linea a qualcosa di simile:
BigInt & returnValue = *this;
ottengo un errore che mi diceva che la sintassi non è giusto. Non sono sicuro di cosa fare, qualsiasi aiuto è molto apprezzato!
ok, quindi se restituisco l'intero oggetto, l'oggetto deve essere creato sull'heap? –
No, puoi crearlo in pila. –
No, c/C++ copia il valore di ritorno dal frame dello stack chiamato a quello precedente. Fondamentalmente ciò significa che, quando non si dispone di un puntatore, l'oggetto viene copiato quando viene restituito. (Anche i primitivi come i puntatori vengono "copiati", ma non li noterai perché puntano semplicemente allo stesso oggetto.) –