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?

Original source