Ссылка всегда должна ссылаться на существующий объект и не может быть nullptr. Указатель может быть nullptr или указывать на невалидную память. При разыменовании nullptr или невалидного указателя возникает неопределенное поведение (часто сегментация памяти), которое сложнее отловить. Ссылка гарантирует, что вы работаете с валидным объектом.
cpp
Ссылка должна быть проинициализирована при объявлении, указывая на конкретный объект, и не может быть переназначена для ссылки на другой объект. Указатель может быть изменен, чтобы указывать на разные объекты или nullptr.
cpp
Основные различия в контексте безопасности:
| Возможность | Ссылка | Указатель |
|---|---|---|
Быть nullptr | Нет | Да |
| Переназначить | Нет | Да |
Разыменование nullptr | Невозможно | Неопределенное поведение |
| Использовать без инициализации | Невозможно (ошибка компиляции) | Возможно (неопределенное поведение при разыменовании) |