delete[]
Operator służy do usuwania tablic. delete
Operator jest używany do usuwania przedmiotów nie tablicy. Wywołuje operator delete[]
i operator delete
działa odpowiednio w celu usunięcia pamięci, którą zajmowała tablica lub obiekt niebędący tablicą po (ostatecznie) wywołaniu destruktorów dla elementów tablicy lub obiektu niebędącego tablicą.
Poniżej przedstawiono relacje:
typedef int array_type[1];
array_type *a = new array_type;
delete [] a;
int *b = new int;
delete b;
int *c = new int[1];
delete[] c;
int (*d)[2] = new int[1][2];
delete [] d;
Dla new
który tworzy tablicę (tak, albo new type[]
czy new
stosowany do konstrukcji typu macierz), wygląd standard w odniesieniu do operator new[]
klasy typu elementu tablicy lub w zasięgu globalnym i przekazuje żądaną ilość pamięci. Może zażądać więcej niż N * sizeof(ElementType)
gdyby chciał (na przykład zapisać liczbę elementów, aby później podczas usuwania wiedział, ile wywołań destruktora ma wykonać). Jeśli klasa zadeklaruje, operator new[]
że dodatkowy do ilości pamięci akceptuje inny size_t
, ten drugi parametr otrzyma liczbę przydzielonych elementów - może go użyć w dowolnym celu (debugowanie itp.).
W przypadku tego, new
który tworzy obiekt niebędący tablicą, będzie szukał operator new
w klasie elementu lub w zasięgu globalnym. Przekazuje żądaną ilość pamięci (dokładnie sizeof(T)
zawsze).
W przypadku delete[]
, sprawdza typ klasy elementów tablic i wywołuje ich destruktory. operator delete[]
Funkcja używana jest jeden w klasie typu elementu, albo jeśli nie ma nikogo wtedy w zasięgu globalnym.
W przypadku delete
, jeśli przekazany wskaźnik jest klasą bazową rzeczywistego typu obiektu, klasa bazowa musi mieć wirtualny destruktor (w przeciwnym razie zachowanie jest niezdefiniowane). Jeśli nie jest to klasa bazowa, wywoływany jest destruktor tej klasy i używany jest operator delete
w tej klasie lub globalnej operator delete
. Jeśli przekazano klasę bazową, wywoływany jest destruktor rzeczywistego typu obiektu i operator delete
używany jest element znaleziony w tej klasie, a jeśli nie ma, operator delete
wywoływany jest element globalny . Jeśli operator delete
klasa ma drugi parametr typu size_t
, otrzyma liczbę elementów do zwolnienia.