PDA

Visualizza la versione completa : [C++] Utilizzo di "reference" e "const"


giuseppe500
01-02-2011, 12:06
ciao.
mi devo creare un piccolo promemoria su come utilizzare i reference e il const.
1)quando devo invocare una funzione che agisce(cambia o imposta il valore)su di un mio oggetto e le modifiche devono persistere al di fuori della funzione A non devo utilizzare i const in quanto devo cambiare il valore .
posso usare :
1)passare un puntatore e modificarlo
f(oggetto * pobj)
pobj = valore
2)creare nei parametri della funzione un reference del tipo :
f(oggetto& obj)
obj = valore
tra l'altro coi reference penso di aver capito che mi semplifica la vita in quanto non devo distruggere l'oggetto col delete

se invece devo utilizzare un oggetto senza modificarlo devo utilizzare i const , qui nascono i miei problemi , che tipo di const e da cosa dipende .
posso usare
f(const oggetto& obj)
, quali sono le casistiche?
esiste un procedimento valido sempre ?
o bisogna districarsi tra
f(const * pObj const)const ecc.. col const prima dopo in mezzo alla fine ecc...

poi, se voglio richiamare la funzione con l' oggetto const da una funzione const devo anteporre il const alla funzione , cosi:
f(const oggetto& obj)const

č giusto?


grazie.

MItaly
01-02-2011, 14:51
Originariamente inviato da giuseppe500
ciao.
mi devo creare un piccolo promemoria su come utilizzare i reference e il const.
1)quando devo invocare una funzione che agisce(cambia o imposta il valore)su di un mio oggetto e le modifiche devono persistere al di fuori della funzione A non devo utilizzare i const in quanto devo cambiare il valore .
posso usare :
1)passare un puntatore e modificarlo
f(oggetto * pobj)
pobj = valore
2)creare nei parametri della funzione un reference del tipo :
f(oggetto& obj)
obj = valore
tra l'altro coi reference penso di aver capito che mi semplifica la vita in quanto non devo distruggere l'oggetto col delete
Con i reference la consuetudine č che il chiamante si preoccupi dell'eventuale cancellazione dell'oggetto (il chiamato deve soltanto usare il parametro reference, non lo deve eliminare); con i puntatori invece dipende dal "contratto" specificato nella documentazione. Dato che un puntatore non documentato č un'ambiguitā, in genere č meglio usare i reference se la proprietā dell'oggetto rimane al chiamante o uno smart pointer con trasferimento di ownership (stile auto_ptr) se la proprietā passa al chiamato.


se invece devo utilizzare un oggetto senza modificarlo devo utilizzare i const , qui nascono i miei problemi , che tipo di const e da cosa dipende .
Sul const, ti consiglio di leggerti queste FAQ (http://www.parashift.com/c++-faq-lite/const-correctness.html), ripassa a chiedere se hai dubbi. :ciauz:

Loading