Когда предпочтительно сохранить элементы данных как ссылки вместо указателей?

В Qt Creator / Designer (2.4.1), если вы не можете найти свойство currentTabText, вы, вероятно, выбрали саму вкладку в дереве объектов.

Обязательно выберите QTabWidget, что должно происходить автоматически при выборе вкладки в окне предварительного просмотра формы (см. Ответ richardwb).

10
задан Runcible 5 June 2009 в 17:23
поделиться

3 ответа

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

В общем, я обычно храню как указатели (или некоторую форму шаблонного интеллектуального указателя). Это гораздо более гибкий подход - как для тестирования (как вы упомянули), так и только с точки зрения нормального использования.

14
ответ дан 3 December 2019 в 15:53
поделиться

Практически никогда не рекомендуется хранить ссылки как элементы данных, а в большинстве случаев это невозможно. Если объекты должны быть назначаемыми (поскольку они должны храниться в контейнере стандартной библиотеки), ссылки использовать нельзя. Кроме того, ссылки не могут быть переставлены, поэтому, как только ссылка инициализируется объектом, она не может ссылаться на другой объект.

См. Этот вопрос Должен ли я предпочесть указатели или ссылки в данных элемента? для более подробного обсуждения вопроса.

8
ответ дан 3 December 2019 в 15:53
поделиться

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

Foo& m_foo;

, а не член

Foo*const m_foo;

, потому что предыдущее объявление документирует тот факт, что m_foo не может быть ноль. В краткосрочной перспективе преимущество невелико. Но в долгосрочной перспективе, когда вы вернетесь к старому коду, мгновенная гарантия того, что вам не придется беспокоиться о том, что m_foo имеет значение null, весьма ценно.

Есть и другие способы решения этой проблемы. достижение аналогичного эффекта. В одном проекте, над которым я работал, где они не понимали ссылок, требовалось, чтобы любые потенциально нулевые указатели имели суффикс «00», например m_foo00 . Интересно, что boost :: optional , похоже, поддерживает ссылки , хотя я не пробовал. Или вы можете засорить свой код утверждениями.

2
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: