Sim*_*ity 1 c++ heap dynamic-memory-allocation delete-operator
如果我int动态分配对象的内存位置,如下所示:
int *x = new int;
完成它之后,想要释放堆上的内存,我将执行以下操作:
delete x;
现在,如果我没有做到以下几点:
x = NULL;
会x指向另一个地址吗?更新: another而不是many
说我没做x = NULL,做了另一个 delete x;,会发生什么?
x(除了= NULL- 即,imo,不良做法)都是未定义的.注意:某些运行时系统将保护您免受某些非常简单的双重删除情况的影响.根据细节,如果您碰巧在其中一个系统上运行,并且没有人将代码部署在另一个处理不同内容的系统上,并且您正在删除没有析构函数的内容,并且你不会在两个删除之间做任何重要的事情,如果没有人改变你的代码来做两个删除之间的重要事情,并且你的线程调度程序(你可能无法控制!)之间没有交换线程两个删除和if,if和if.所以回到墨菲:因为它会出错,它会,并且在最糟糕的时刻它会出错.
https://isocpp.org/wiki/faq/freestore-mgmt