Deleting an object when multiple pointers are pointing to it?
c++, memory-management, pointers
Solution
Whenever you `new` an object, you need to `delete` it, free'ing the memory
ClassA* object = new ClassA();
delete object; // Free's the memory you allocated.
The point of setting your pointers to `NULL` is to stop dereferencing pointers that are invalid
object = NULL;
This is done so that tests can be performed before attempting a dereference:
if(object != NULL)
{
object->SomeMethod(); // We can assume it's safe to use the pointer.
}
Also note that you can delete the memory from any pointer that points to it.
ClassA* object = new ClassA();
ClassA* pointer1 = object;
ClassA* pointer2 = object;
delete pointer1;
`object, pointer1, and pointer2` now all point to memory that has already been released, and unless they will be redefined, they should all be set to NULL.
Problem
I've been told that when if I have multiple pointers pointing to the same object, I cannot delete it normally (using the delete keyword). Instead, I've been told that I need to set the pointers to NULL or 0. Given I have: ``` ClassA* object = new ClassA(); ClassA* pointer1 = object; ClassA* pointer2 = object; ``` So to `delete` `pointer1` and `pointer2`, do I need to do the following? ``` pointer1 = 0; pointer2 = 0: ``` Once I've set it to NULL, do I still need to use the keyword `delete`? Or is just setting it to 0 good enough?