L' delete[]operatore viene utilizzato per eliminare le matrici. L' deleteoperatore viene utilizzato per eliminare oggetti non array. Richiama operator delete[]e operator deletefunziona rispettivamente per eliminare la memoria occupata dall'array o dall'oggetto non array dopo (eventualmente) chiamare i distruttori per gli elementi dell'array o l'oggetto non array.
Quanto segue mostra le relazioni:
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;
Per newquesto crea un array (quindi, new type[]o newapplicato a un costrutto di tipo array), lo Standard cerca un operator new[]nella classe del tipo di elemento dell'array o nell'ambito globale e passa la quantità di memoria richiesta. Potrebbe richiedere più di N * sizeof(ElementType)quanto desideri (ad esempio per memorizzare il numero di elementi, quindi in seguito, quando si elimina, sa quante chiamate del distruttore devono essere eseguite). Se la classe dichiara operator new[]un'aggiunta alla quantità di memoria accetta un'altra size_t, quel secondo parametro riceverà il numero di elementi allocati - può usarlo per qualsiasi scopo (debug, ecc ...).
Per quello newche crea un oggetto non-array, cercherà un operator newnella classe dell'elemento o nell'ambito globale. Passa la quantità di memoria richiesta (esattamente sizeof(T)sempre).
Per il delete[], esamina il tipo di classe di elementi delle matrici e chiama i loro distruttori. La operator delete[]funzione utilizzata è quella nella classe del tipo di elemento, o se non ce n'è nessuna nell'ambito globale.
Infatti delete, se il puntatore passato è una classe base del tipo di oggetto reale, la classe base deve avere un distruttore virtuale (altrimenti il comportamento non è definito). Se non è una classe base, viene chiamato il distruttore di quella classe e viene usato un operator deletein quella classe o il globale operator delete. Se è stata passata una classe di base, viene chiamato il distruttore del tipo di oggetto reale e operator deleteviene utilizzato il trovato in quella classe, o se non ce n'è nessuno, operator deleteviene chiamato un globale . Se operator deletenella classe ha un secondo parametro di tipo size_t, riceverà il numero di elementi da deallocare.