Zastanawiałem się, czy mogę ominąć stosując pobierające gdybym tylko dozwolone zmienną referencyjną const, co następujeCzy mogę używać odwołań do const zamiast funkcji 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;
}
Zastanawiam się, dlaczego ludzie nie wydają się to zrobić w ogóle. Czy brakuje mi jakiejś poważnej wady? Proszę wnieść wkład do listy zalet i wad, i poprawić je, jeśli to konieczne.
Zalety:
- Nie ma nad głową przez wywołań funkcji getter.
- Program zmniejsza rozmiar, ponieważ jest mniej funkcji.
- Ciągle mogę modyfikować wewnętrzne klasy, zmienne referencyjne zapewniają warstwę abstrakcji.
Wady:
- Zamiast funkcji getter, mam kilka odniesień. Zwiększa to rozmiar obiektu.
- Użytkownicy mogą zepsuć prywatnych członków, ale ci ludzie są złośliwi, prawda?
Nie wspominając, że nadszedł dzień, w którym chcesz użyć bardziej wydajnej reprezentacji danych, a nie możesz, ponieważ potrzebujesz prawidłowego odniesienia do tych typów. – chris
@chris: To jest dobra uwaga. Nawet jeśli masz funkcję zwracającą const ref, zawsze możesz ją zmienić, aby zwrócić kopię wartości w przypadku zmiany modelu danych. – Bathsheba