Mi chiedevo se potevo ignorare utilizzando getter se ho appena concesso una variabile di riferimento const, come seguePosso usare i riferimenti const invece delle funzioni getter?
#include <string>
class cTest
{
private:
int m_i;
std::string m_str;
public:
const int & i;
const std::string & str;
cTest(void)
: i(m_i)
, str(m_str)
{}
};
int main(int argc, char *argv[])
{
cTest o;
int i = o.i; // works
o.i += 5; // fails
o.str.clear(); // fails
return 0;
}
Mi chiedo perché la gente non sembrano fare questo a tutti. C'è qualche grave svantaggio che mi manca? Si prega di contribuire alla lista dei vantaggi e degli svantaggi e correggerli se necessario.
Vantaggi:
- Non c'è sovraccarico attraverso chiamate di funzioni getter.
- La dimensione del programma diminuisce perché ci sono meno funzioni.
- Posso ancora modificare l'interno della classe, le variabili di riferimento forniscono uno strato di astrazione.
Svantaggi:
- Invece di funzioni getter, ho un sacco di riferimenti. Questo aumenta la dimensione dell'oggetto.
- Utilizzando
const_cast
, le persone possono incasinare membri privati, ma queste persone sono maliziose, giusto?
Per non parlare del giorno in cui si desidera utilizzare una rappresentazione più efficiente per i dati e non è possibile perché è necessario un riferimento valido a quei tipi. – chris
@chris: Questo è un buon punto. Anche se hai una funzione che restituisce un riferimento const, puoi sempre refactoring che per restituire una copia valore dovrebbe cambiare il modello di dati. – Bathsheba