delete[]Оператор використовується для видалення масивів. deleteОператор використовується для видалення об'єктів без масивів. Він викликає operator delete[]і operator deleteфункціонує відповідно, щоб видалити пам'ять, яку об'єкт масиву або не масив займав після (зрештою) виклику деструкторів для елементів масиву або об'єкта, що не є масивом.
Далі показано відносини:
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;
Для того, newщо створює масив (таким чином, new type[]або newзастосовується до конструкції типу масиву), Стандарт шукає operator new[]клас типу елемента масиву або в глобальній області і передає потрібний обсяг пам'яті. Він може вимагати більше, ніж N * sizeof(ElementType)якщо хоче (наприклад, зберігати кількість елементів, тому пізніше при видаленні знає, скільки викликів деструктора виконано). Якщо клас оголошує, operator new[]що додатковий об'єм пам'яті приймає інший size_t, цей другий параметр отримає кількість виділених елементів - він може використовувати це для будь-яких цілей, які він захоче (налагодження тощо).
Для того, newщо створює об'єкт без масиву, він буде шукати operator newв класі елемента або в глобальному масштабі. Він передає потрібний обсяг пам'яті (точно sizeof(T)завжди).
Для цього delete[], він вивчає тип класу елементів масиву та викликає їх деструктори. Використовувана operator delete[]функція - це в класі типу елемента, або якщо такої немає, то в глобальній області застосування.
Для delete, якщо переданий покажчик є базовим класом типу фактичного об'єкта, базовий клас повинен мати віртуальний деструктор (інакше поведінка не визначена). Якщо це не базовий клас, то викликається деструктор цього класу і використовується ін operator deleteв цьому класі або глобальному operator delete. Якщо базовий клас був переданий, то викликається деструктор фактичного типу об'єкта, і використовується operator deleteзнайдений у цьому класі, або якщо його немає, operator deleteназивається глобальним . Якщо operator deleteу класі є другий параметр типу size_t, він отримає кількість елементів, які потрібно розмістити.