Вызывая удалить на мелкую копию не взорвать

В приведенном ниже коде память выделяется для целого числа, а затем делается неглубокая копия и, наконец, вызывается удаление. Как он по-прежнему печатает 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 ответ

Неопределенное поведение означает, что все может случиться.

Это может привести к сбою.

Это может разбить вашу машину.

Это может разбить ваш мозг.

Это может врезать Стрельца А * в ваш мозг.

Это может врезать ваш мозг в машину, а затем врезать их обоих в Стрельца А *.

Может показаться, что работает.

Но это все еще не определено.

Не ожидайте результатов.

Другие вопросы по тегам