переменная-член в качестве ссылки - PullRequest
3 голосов
/ 28 февраля 2011

В чем преимущество объявления переменной-члена в качестве ссылки?Я видел, как люди это делают, и не могу понять, почему.

Ответы [ 3 ]

4 голосов
/ 28 февраля 2011

Один полезный случай - когда у вас нет доступа к конструктору этого объекта, но вы не хотите работать с косвенным указателем через указатель. Например, если у класса A нет открытого конструктора, и ваш класс хочет принять экземпляр A в своем конструкторе, вы должны сохранить A&. Это также гарантирует, что ссылка инициализирована.

1 голос
/ 28 февраля 2011

Вообще говоря, типы с необычной семантикой присваивания, такие как std::auto_ptr<> и ссылки на C ++, облегчают попадание в ногу (или отстреливание всей ноги).

Когда ссылка используетсячлен, который означает, что сгенерированный компилятором operator= делает очень удивительную вещь, назначая объект, на который ссылаются, вместо переназначения ссылки, потому что ссылки не могут быть переназначены для ссылки на другой объект.Другими словами, наличие ссылочного члена большую часть времени делает класс не присваиваемым.

Можно избежать этого удивительного поведения, используя простые указатели.

1 голос
/ 28 февраля 2011

Ссылка на член полезна, когда вам нужен доступ к другому объекту без его копирования.

В отличие от указателя, ссылка не может быть изменена (случайно), поэтому она всегда ссылается на один и тот же объект.

...