Question:
Why, after deleting an object I allocated dynamically, is the pointer still there? What exactly have I deleted and what would happen if I assigned a new value to the pointer without nullifying it first?
Answer:
You delete the object, not the pointer. The pointer’s value doesn’t chang when you delete the object to which it points. You don’t have to nullify the pointer after its object has been deleted; simply assign the new object’s address to it:
int * p1= new int;delete p1; p1= new int; // fine
Nullifying a pointer after applying delete can be useful if you want to guarantee that other parts of the program don’t attempt to delete it for the second time:
int * p1= new int;delete p1; // many lines of codedelete p1; //disaster! deleted p1 for the second time
By contrast, deleting a null pointer is harmless:
delete p1;p1=0;delete p1; // ok, p1 is nulldelete p1; // ok, null pointer deletion has no effect