„Unikaj zwracania uchwytów do obiektów wewnętrznych”, więc jaka jest alternatywa?
Efektywny C ++ autorstwa Scotta Meyersa mówi w rozdziale 5, punkt 28, aby uniknąć zwracania „uchwytów” (wskaźników, odniesień lub iteratorów) do obiektów wewnętrznych i zdecydowanie stanowi dobry punkt.
To znaczy. nie rób tego:
class Family
{
public:
Mother& GetMother() const;
}
ponieważ niszczy hermetyzację i pozwala na zmianę członków prywatnych obiektów.
Nawet tego nie rób:
class Family
{
public:
const Mother& GetMother() const;
}
ponieważ może to prowadzić do „wiszących uchwytów”, co oznacza, że zachowujesz odniesienie do członka obiektu, który jest już zniszczony.
Moje pytanie brzmi: czy są jakieś dobre alternatywy? Wyobraź sobie, że matka jest ciężka! Jeśli teraz zwrócę kopię Matki zamiast odniesienia, GetMother staje się dość kosztowną operacją.
Jak radzisz sobie z takimi przypadkami?