|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
[C++] Semplice ma subdolo quesito
Ciao a tutti
Il quesito e': posso ritornare un oggetto locale? Sempre, indistintamente o devo fare i "doveroso distinguo" (costruttore copia, per intenderci)? Es: MyObject getObject() { MyObject obj; // Make some operations return obj; } Se dichiaro MyObject o = getObject(); e' valido? High Flying Sottovento |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Probabilmente ti ritorna un indirizzo di memoria valido ma la memoria delle variabili istanziate localmente viene liberata subito dopo il return quindi non contiene più l'oggetto in questione.
ciao ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ho vinto la pigrizia e fatto delle prove.
Per fare una cosa del genere occorre che vi sia un costruttore di copia definito, altrimenti va tutto a quel paese quando l'oggetto locale e' distrutto, come dicevi, al return. Naturalmente non sono sicuro al 100%, ho fatto una prova piccola piccola. Se qualcuno ha altre informazioni... High Flying Sottovento |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Il motivo per cui serve il costruttore di copia è che quando esegui:
MyObject o = getObject(); l'oggetto locale al metodo getObject viene ritornato e copiato nell'oggetto o il cui spazio di memoria è distinto da quello dell'oggetto locale al metodo, e che potrà essere distrutto subito dopo che la copia è avvenuta.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:04.