In the C++ programming language, the
delete operator calls the destructor of the given argument, and returns memory allocated by
new back to the heap. A call to
delete must be made for every call to
new to avoid a memory leak. After calling
delete the memory object pointed to is invalid and should no longer be used. Many programmers assign 0 (null pointer, also known as NULL, nil, or nullptr) to pointers after using
delete to help minimize programming errors. Note, however, that deleting a null pointer has no effect (if the deallocation function is one supplied in the standard library), so it is not necessary to check for a null pointer before calling
Example code snippet:
int *p_var = nullptr; // new pointer declared p_var = new int; // memory dynamically allocated /* ....... other code ........*/ delete p_var; // memory freed up p_var = nullptr; // pointer changed to nullptr (null pointer)
Arrays allocated with
new  can be similarly deallocated with
int size = 10; int *p_var = nullptr; // new pointer declared p_var = new int [size]; // memory dynamically allocated /* ....... other code ........*/ delete  p_var; // memory freed up p_var = nullptr; // pointer changed to nullptr
Arrays, allocated with
new, must be deallocated with
delete, since the layout of arrays allocated with
new is implementation defined, and possibly not compatible with
new. For example, in order to properly perform object destruction at
delete, some implementations of
new embed the number of allocated objects into the beginning of the allocated memory chunk, and return pointer to the remaining part of the array.
The delete operator (user defined) is different from
operator delete. The delete operator may call
operator delete to free up memory.
- "operator delete". Cppreference.com. Retrieved 13 January 2011.
- "C++ Standard Core Language Defect Reports and Accepted Issues". Retrieved 29 March 2015.