我想知道如果我尝试对已删除或未分配的指针执行delete
会怎样?我读了两件事:首先,delete
运算符将进行一些检查,而我们不需要检查指针是否为null;然后,我读到它可能导致未知行为。
我之所以这么问,是因为我使用了一些包含Qt对象属性的个人对象;我认为Qt会在关闭窗口时删除所有关联的窗口小部件,但我仍然不确定:如果在窗口关闭前发生软崩溃,我们必须手动删除所有对象。
那么,什么是最佳解决方案?这样的事吗?
if( my_object )
delete my_object;
可以避免危险行为吗?
最佳答案
已经是delete
d的非null指针上的delete
是未定义的行为-您的程序可能会崩溃。您可以在空指针上安全地使用delete
-它会产生无操作。
因此,真正的问题不是空指针上的delete
。真正的问题在这里:
ptr = new Something();
otherPtr = ptr;
delete ptr;
delete otherPtr;
如果您有多个指向同一对象的指针,则这很可能会发生。可能的解决方案是:
delete
)或delete
。 关于c++ - 删除已删除的对象: behavior?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8501740/