In questi giorni sto tenendo un corso di C#. Durante il corso abbiamo parlato di IClonable, const (di C++) e altre cosette.
Poi un partecipante mi ha mandato questa mail:
Ho pensato ancora a quella domanda sull'interfaccia IClonable che le avevo posto. Ovvero...
class B
{
...
}
class A
{
private B b;
...
public B getB
{
get{return b;}
}
...
}
Il mio dubbio riguardava il ritorno di b, in modo che non venisse modificato da parte del client della classe A. La soluzione consisterebbe nel ridefinire il metodo dell'interfaccia Clone per B, però se B contiene una grande mole di dati, questo potrebbe richiedere troppo spazio in memoria.
La cosa ideale sarebbe un metodo del tipo:
public:
const B* getB();
del C++...non c'è nulla di simile?
Risposta: purtroppo no.
Mi sono documentato sulla const applicata ai parametri di ritorno, ho cercato su internet, ho chiesto a Raf ...
Ma alla fine no... non c'è nulla da fare.
Per chi vuole approfondire l'uso della const in C++: guardate qui.
Per chi vuole approfondire const e readonly di C#: guardate qui, qui e qui.
Attenzione nell'implementazione di IClonable... c'è differenza tra deep copy e shallow copy: http://www.devx.com/vb2themax/Tip/18707
E comunque è assolutamente vero... se l'oggetto da passare occupa tanta memoria... il copiarlo non è la soluzione migliore...