Jér*_*eil 8 c++ pointers memory-management delete-operator
我想知道如果我尝试对delete已经删除的指针执行操作,或者可能尚未分配,会有什么问题?我读过两件事:第一,delete操作员会做一些检查,我们不需要检查指针是否为空; 然后,我读到它可能导致未知的行为..
我问它,因为我使用了一些包含Qt对象属性的个人对象; 我认为Qt会删除关闭窗口时关联的所有小部件,但我不确定并且仍然如此:如果在窗口关闭之前软崩溃,我们必须手动删除所有对象.
那么,最好的解决方案是什么?那样的东西?
if( my_object )
delete my_object;
Run Code Online (Sandbox Code Playgroud)
它能避免危险的行为吗?
sha*_*oth 17
delete在已经delete非空的指针上是未定义的行为 - 您的程序可能会崩溃.您可以安全地使用delete空指针 - 它将产生一个无操作.
所以真正的问题不delete在于空指针.真正的问题在这里:
ptr = new Something();
otherPtr = ptr;
delete ptr;
delete otherPtr;
Run Code Online (Sandbox Code Playgroud)
如果你有几个指向同一个对象的指针并且它非常危险,就会发生这种情况.可能的解决方案是:
delete代码中没有)或delete在恰当的时间.