delete operator

delete operator Deletes a dynamic object or array of objects

delete-expr ::= [::] delete cast-expr | [::] delete "[" "]" cast-expr

The delete expression destroys dynamically-allocated objects and frees their memory. A scalar allocated with new must be freed with delete. An array allocated with new[] must be freed with delete[]. Do not mix scalar allocation or deallocation with array allocation or deallocation.

It is safe to delete a null pointer; nothing will happen.

You can overload operator delete and operator delete[] (as described in Chapter 5). Two global placement operator delete functions are provided by the standard library (see the <new> header); you can define additional functions if you wish.

The first argument to operator delete is the pointer to the memory that must be freed. Additional arguments can be used for placement delete operations, which cannot be used directly but are matched with placement new operations if the new expression throws an exception.

Example

void operator delete(void* p)

{

  debug(p);

  std::free(p);

}

int* p = new int;

int* array = new int[10];

...

delete p;

delete[] array;

See Also

expression, new, Chapter 3, Chapter 5, <new>