我想知道如果我尝试对已删除或未分配的指针执行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/

    10-11 22:08
    查看更多