Вызывая удалить на мелкую копию не взорвать
В приведенном ниже коде память выделяется для целого числа, а затем делается неглубокая копия и, наконец, вызывается удаление. Как он по-прежнему печатает 23 в качестве вывода и почему вызов delete не вызывает q, вызывает исключение времени выполнения.
#include <iostream>
using namespace std;
int main() {
int* p = new int(23);
int* q = p;
delete p;
cout << *p << endl;
delete q;
return 0;
}
1 ответ
Неопределенное поведение означает, что все может случиться.
Это может привести к сбою.
Это может разбить вашу машину.
Это может разбить ваш мозг.
Это может врезать Стрельца А * в ваш мозг.
Это может врезать ваш мозг в машину, а затем врезать их обоих в Стрельца А *.
Может показаться, что работает.
Но это все еще не определено.
Не ожидайте результатов.