El delete[]
operador se utiliza para eliminar matrices. El delete
operador se utiliza para eliminar objetos que no son de matriz. Llama operator delete[]
y operator delete
funciona respectivamente para eliminar la memoria que ocupó la matriz o el objeto no matriz después (eventualmente) de llamar a los destructores para los elementos de la matriz o el objeto no matriz.
A continuación se muestran las relaciones:
typedef int array_type[1];
// create and destroy a int[1]
array_type *a = new array_type;
delete [] a;
// create and destroy an int
int *b = new int;
delete b;
// create and destroy an int[1]
int *c = new int[1];
delete[] c;
// create and destroy an int[1][2]
int (*d)[2] = new int[1][2];
delete [] d;
Para el new
que crea una matriz (por lo tanto, new type[]
o se new
aplica a una construcción de tipo de matriz), el Estándar busca una operator new[]
clase de tipo de elemento de la matriz o en el ámbito global, y pasa la cantidad de memoria solicitada. Puede solicitar más de N * sizeof(ElementType)
lo que quiere (por ejemplo, almacenar el número de elementos, por lo que más tarde, al eliminar, sabe cuántas llamadas de destructor se realizarán). Si la clase declara operator new[]
que un adicional a la cantidad de memoria acepta otro size_t
, ese segundo parámetro recibirá el número de elementos asignados; puede usar esto para cualquier propósito que desee (depuración, etc.).
Para el new
que crea un objeto sin matriz, buscará un operator new
en la clase del elemento o en el ámbito global. Pasa la cantidad de memoria solicitada (exactamente sizeof(T)
siempre).
Para delete[]
ello, analiza el tipo de clase de elemento de las matrices y llama a sus destructores. La operator delete[]
función utilizada es la de la clase del tipo de elemento, o si no hay ninguna en el ámbito global.
Para el delete
, si el puntero pasado es una clase base del tipo del objeto real, la clase base debe tener un destructor virtual (de lo contrario, el comportamiento no está definido). Si no es una clase base, se llama al destructor de esa clase y se usa un operator delete
en esa clase o el global operator delete
. Si se pasó una clase base, se llama al destructor del tipo de objeto real, y operator delete
se utiliza el encontrado en esa clase, o si no hay ninguno, operator delete
se llama a un global . Si operator delete
en la clase tiene un segundo parámetro de tipo size_t
, recibirá el número de elementos para desasignar.