Ответ 1
Перегрузка оператора. Использование указателей для "передачи через ссылку" даст вам неприемлемый синтаксис.
Возможный дубликат:
С++: когда использовать ссылки против указателей
Могла ли перегрузка операторов работать без ссылок?
Я не мог с этим поделать, но этот основополагающий вопрос был на мой взгляд: почему С++ имеет ссылки, когда вы могли бы сделать это с указателями?
Я знаю, что в некоторых ситуациях они немного безопаснее и чаще всего делают код более красивым, но технически нет никакой разницы, не так ли? Так есть ли ситуации, когда я не мог сделать с указателем, а ссылка - обязательная?
Я бы хотел, чтобы конкретные примеры использования ссылок были неизбежны.
Отказ от ответственности:
Я не нашел ответов на это в StackOverflow, это не вопрос о различиях в синтаксисе. Мне интересно, почему язык С++ ввел ссылки в первую очередь.
Перегрузка оператора. Использование указателей для "передачи через ссылку" даст вам неприемлемый синтаксис.
pass-by-reference
или return-by-reference
.const
) Ссылки могут привязываться к временным объектам. Чтобы создать временный указатель, вам нужно освободить его внутри метода, которым вы его передаете. Но вы не можете сказать, временно ли это или нет.Если у вас есть указатель в качестве параметра, вы должны проверить, является ли он NULL. Со ссылками вы должны сделать эту проверку. Вот почему в С++ есть ссылки на самого человека - http://www.stroustrup.com/bs_faq2.html#pointers-and-references
class A{
public:
A(int i){}
};
void foo(const A& a){};
void foo2(const A* pa){};
int main (void)
{
foo(1);
foo2(1); //invalid
return (0);
}
Один случай, который я знаю. Пользователю не нужно управлять ссылочным объектом, компилятор может его уничтожить. Поскольку указатель требует, чтобы пользователь удалял его явным. Для foo2 трудно управлять временным жизненным циклом.
Пример:
my_type *get_some_data();
...
my_type *data = get_some_data();
позволяет делать delete data
, пока
my_type &get_some_data();
...
my_type &data = get_some_data();
не дает возможности для удаления.