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