Назад к вопросам
JuniorТеорияЧасто
Что произойдёт при запуске этой программы?
#include <iostream>
int main() {
int* p = new int{42};
int* q = p;
delete q;
std::cout << *p << '\n';
}Неопределённое поведение: p и q хранят один адрес, а число по нему удалено
- Ждать, что у
pостанется своё число:q = pкопирует адрес, а не число, поэтомуdelete qудаляет единственное число, и*pчитает удалённый объект. - Ждать гарантированного падения: чтение после
delete— неопределённое поведение, и стандарт не обещает ни падения, ни другого исхода.
- Почему присваивание
q = nullptrпослеdelete qне делает*pбезопасным? - Как
std::unique_ptr, владеющий числом, предотвратил бы эту ошибку?