Можно ли сохранить ссылку в качестве члена класса в C ++? Пожалуйста, приведите пример - PullRequest
2 голосов
/ 23 октября 2011

Насколько я знаю, ссылки должны быть объявлены и инициализированы одновременно.

Я думаю, его единственное использование заключается в передаче аргументов и в некоторых случаях полиморфизма.

Можно ли сохранить ссылку в качестве члена данных в классе?

Если да, то когда нам это нужно?

Пожалуйста, дайте мне пример.

Ответы [ 3 ]

5 голосов
/ 23 октября 2011

Вы бы использовали ссылку в качестве члена класса, когда она является неотъемлемой частью класса, без которой класс не может функционировать, и вы хотите либо разделить эту часть между несколькими классами, либо использовать ее полиморфно:

class Presenter
{
    IView & view;
    IModel & model;

    Presenter(IView & view, IModel & model)
        : view(view), model(model)
    {
    }
};

Ссылочный элемент не может быть изменен после построения, поэтому его использование дает строгое представление о том, как должен использоваться класс.Использование обычных или умных указателей обеспечивает большую гибкость.

2 голосов
/ 23 октября 2011

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

Почти всегда предпочтительнее использовать члены-данные типа указателя, поскольку они эффективно предоставляют те же возможности, с теми же ограничениями времени жизни, но без того, чтобы класс не назначался.

0 голосов
/ 23 октября 2011

Как указал дон, ссылочный элемент может использоваться почти так же, как и элемент-указатель. Я думаю, что стоит отметить, что указатели также могут быть нулевыми, а также переустанавливаться, так что в большинстве случаев они гораздо полезнее.

кроме того, в современном C ++ вы, вероятно, не будете использовать указатель или ссылочный элемент, поскольку вы можете использовать shared_ptr или unique_ptr , чтобы лучше инкапсулировать время жизни членов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...