«Избегайте возврата дескрипторов внутренним объектам», так какова альтернатива?
Эффективный C ++ Скотт Мейерс говорит в главе 5, пункт 28, чтобы избежать возвращения "ручки» (указатели, ссылки или итераторы) на внутренние объекты, и это определенно имеет смысл.
То есть дон»сделать это:
class Family
{
public:
Mother& GetMother() const;
}
потому что это разрушает инкапсуляцию и позволяет изменять члены частного объекта.
Дон»т даже сделать это:
class Family
{
public:
const Mother& GetMother() const;
}
потому что это может привести ксвисающие ручки "Это означает, что вы сохраняете ссылку на член объекта, который уже уничтожен.
Теперь мой вопрос: есть ли хорошие альтернативы? Представь, что мама тяжелая! Если я сейчас верну копию Mother вместо ссылки, GetMother становится довольно дорогостоящей операцией.
Как вы справляетесь с такими случаями?