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.[1] 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) 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[2]), so it is not necessary to check for a null pointer before calling delete
.
Example code snippet:
int *p_var = NULL; // new pointer declaredp_var = new int; // memory dynamically allocated /* .......other code........*/ delete p_var; // memory freed upp_var = NULL; // pointer changed to 0 (null pointer)
Arrays allocated with new []
can be similarly deallocated with delete []
:
int size = 10;int *p_var = NULL; // new pointer declaredp_var = new int [size]; // memory dynamically allocated /* .......other code........*/ delete [] p_var; // memory freed upp_var = NULL; // pointer changed to 0
Arrays, allocated with new[]
, must be deallocated with delete[]
, since the layout of arrays, allocated with new[]
is implementation defined,[citation needed] 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.[citation needed]
The delete operator (user defined) is different from operator delete
. The delete operator may call operator delete
to free up memory.
See also
References
External links