首页 > 解决方案 > 在浅拷贝上调用删除不会爆炸

问题描述

在下面的代码中,为整数分配了内存,然后进行了浅拷贝,最后在其上调用了 delete。它如何仍将 23 作为输出打印以及为什么对 q 的 delete 调用不会导致运行时异常。

#include <iostream>

using namespace std;

int main() {
    int* p = new int(23);
    int* q = p;

    delete p;
    cout << *p << endl;
    delete q;


    return 0;
}

标签: c++memory-managementdelete-operator

解决方案


未定义的行为意味着任何事情都可能发生。

它可能会崩溃。

它可能会撞毁你的车。

它可能会让你的大脑崩溃。

它可能会使射手座 A* 撞到你的大脑。

它可能会让你的大脑撞到你的车上,然后把它们撞到射手座 A* 上。

它可能看起来有效。

但它仍然是未定义的。

不要期望结果。


推荐阅读