„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?

questionAnswers(6)

yourAnswerToTheQuestion