Search code examples
c++memory-leaksnew-operatordynamic-memory-allocationdelete-operator

Is c++ delete [] applicable to primitive types


In C++, if I have a dynamically allocated array of primitive type, is it necessary to use delete [] to prevent memory leakage? For example,

char * x = new char[100];
delete x; // is it required to call delete [] x?
struct A {
 ...
};
A *p = new A[30];
delete [] p; // delete p would cause memory leakage

Please comment.


Solution

  • Dynamic memory in C++.

    pointer = new T
    pointer = new T [number_of_elements]
    

    The first expression is used to allocate memory to contain one single element of type T. The second one is used to allocate a block (an array) of elements of type T, where number_of_elements is an integer value representing the amount of these. For example:

    1.  int * foo;
    2.  foo = new int [5]; 
    

    In the below statements, first statement releases the memory of a single element allocated using new, and the second one releases the memory allocated for arrays of elements using new and a size in brackets ([]).

    1. delete pointer;
    2. delete[] pointer;