c++ - 在浅拷贝上调用删除不会爆炸
问题描述
在下面的代码中,为整数分配了内存,然后进行了浅拷贝,最后在其上调用了 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;
}
解决方案
未定义的行为意味着任何事情都可能发生。
它可能会崩溃。
它可能会撞毁你的车。
它可能会让你的大脑崩溃。
它可能会使射手座 A* 撞到你的大脑。
它可能会让你的大脑撞到你的车上,然后把它们撞到射手座 A* 上。
它可能看起来有效。
但它仍然是未定义的。
不要期望结果。
推荐阅读
- azure-devops - 使用 Azure Dacpac 任务时释放管道错误
- asp.net-core-mvc - 如何使用 Swashbuckle.AspNetCore.Swagger 在 asp.net 核心中忽略/更改模型参数
- android - React Native [Android] 中的 FIrebase 云消息传递
- html - Django 视图打开不同的内容
- android - 如何使用 Flutter 制作“全选”和“取消全选”按钮?
- javascript - 如何调用 API 以使其返回您请求的任何内容以及如何减少 Vuejs 中的观察者数量
- sql - postgres:查询百分比执行
- spring - 将 Angular 10 与 Spring 安全连接以使用自定义登录页面时出现问题
- python - Python 错误:NameError:名称未定义
- r - 如何使用防火墙阻止 R 访问互联网?