在 C++ 中,我理解 delete
运算符在与数组一起使用时会“破坏”它,释放它使用的内存。但完成后会发生什么?
我想我的程序只会标记出堆中被释放以供重新使用的相关部分,然后继续。
但我也注意到,数组的第一个元素设置为 null,而其他元素保持不变。这有什么用?
int * nums = new int[3];
nums[0] = 1;
nums[1] = 2;
cout << "nums[0]: " << *nums << endl;
cout << "nums[1]: " << *(nums+1) << endl;
delete [] nums;
cout << "nums[0]: " << *nums << endl;
cout << "nums[1]: " << *(nums+1) << endl;
最佳答案
调用 delete[]
时会发生两件事:
- 如果数组的类型具有非平凡的析构函数,则以相反的顺序为数组中的每个元素调用析构函数
- 释放数组占用的内存
在调用 delete
后访问数组占用的内存会导致未定义的行为(也就是说,任何事情都可能发生——数据可能仍然存在,或者当您尝试读取时您的程序可能崩溃它,否则可能会发生更糟糕的事情)。
关于c++ - 在 C++ 中,调用 delete 运算符时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454598/