I am wondering what will hapen if I try to do a delete
on a pointer that is already deleted, or may have not been allocated ? I've read two things : first, that delete
operator will do some checkings and we do not need to check if the pointer is null ; and then, I read that it can lead to unknown behaviors..
I'm asking it, because I use some personal objects that contains Qt objects attributes ; I think that Qt delete all widgets associated when we close the window, but I'm not pretty sure and still : if the soft crash before the window's close, we have to delete all objects manually.
So, what would be the best solution ? Something like that ?
if( my_object )
delete my_object;
Can it avoid dangerous behaviours ?
delete
on an already delete
d non-null pointer is undefined behavior - your program will likely crash. You can safely use delete
on a null pointer - it will yield a no-op.
So the real problem is not delete
on a null pointer. The real problem is here:
ptr = new Something();
otherPtr = ptr;
delete ptr;
delete otherPtr;
This can happen if you have several pointers to the same object and it is quite dangerous. The possible solutions are:
delete
in your code) ordelete
at exactly the right time.