L' delete[]
operatore viene utilizzato per eliminare le matrici. L' delete
operatore viene utilizzato per eliminare oggetti non array. Richiama operator delete[]
e operator delete
funziona 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 new
questo crea un array (quindi, new type[]
o new
applicato 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 new
che crea un oggetto non-array, cercherà un operator new
nella 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 delete
in 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 delete
viene utilizzato il trovato in quella classe, o se non ce n'è nessuno, operator delete
viene chiamato un globale . Se operator delete
nella classe ha un secondo parametro di tipo size_t
, riceverà il numero di elementi da deallocare.