«Избегайте возврата дескрипторов внутренним объектам», так какова альтернатива?

Эффективный C ++ Скотт Мейерс говорит в главе 5, пункт 28, чтобы избежать возвращения "ручки» (указатели, ссылки или итераторы) на внутренние объекты, и это определенно имеет смысл.

То есть дон»сделать это:

class Family
{
public:
    Mother& GetMother() const;
}

потому что это разрушает инкапсуляцию и позволяет изменять члены частного объекта.

Дон»т даже сделать это:

class Family
{
public:
    const Mother& GetMother() const;
}

потому что это может привести ксвисающие ручки "Это означает, что вы сохраняете ссылку на член объекта, который уже уничтожен.

Теперь мой вопрос: есть ли хорошие альтернативы? Представь, что мама тяжелая! Если я сейчас верну копию Mother вместо ссылки, GetMother становится довольно дорогостоящей операцией.

Как вы справляетесь с такими случаями?

Ответы на вопрос(6)

Ваш ответ на вопрос