Operatore delete (C++)delete Operator (C++)

Dealloca un blocco di memoria.Deallocates a block of memory.

SintassiSyntax

[::] delete cast-expression  
[::] delete [ ] cast-expression  

NoteRemarks

Il cast-expression argomento deve essere un puntatore a un blocco di memoria allocato in precedenza per un oggetto creato con il operatore new.The cast-expression argument must be a pointer to a block of memory previously allocated for an object created with the new operator. Il eliminare operatore ha un risultato di tipo void e pertanto non restituisce un valore.The delete operator has a result of type void and therefore does not return a value. Ad esempio:For example:

CDialog* MyDialog = new CDialog;  
// use MyDialog  
delete MyDialog;  

Usando eliminare su un puntatore a un oggetto non allocato con nuove otterranno risultati imprevedibili.Using delete on a pointer to an object not allocated with new gives unpredictable results. Tuttavia, è possibile utilizzare eliminare su un puntatore con il valore 0.You can, however, use delete on a pointer with the value 0. Questo significa che, quando nuove restituisce 0 in caso di errore, il risultato di un'operazione di eliminazione nuove operazione è solo informativo.This provision means that, when new returns 0 on failure, deleting the result of a failed new operation is harmless. Visualizzare la nuova ed eliminare operatori per altre informazioni.See The new and delete Operators for more information.

Il nuove e eliminare operatori possono anche essere utilizzati per i tipi predefiniti, incluse le matrici.The new and delete operators can also be used for built-in types, including arrays. Se pointer fa riferimento a una matrice, inserire parentesi vuote prima di pointer:If pointer refers to an array, place empty brackets before pointer:

int* set = new int[100];  
//use set[]  
delete [] set;  

Usando il eliminare operatore su un oggetto dealloca la memoria.Using the delete operator on an object deallocates its memory. Un programma che dereferenzia un puntatore dopo l'eliminazione dell'oggetto può ottenere risultati imprevisti o un arresto anomalo.A program that dereferences a pointer after the object is deleted can have unpredictable results or crash.

Quando eliminare viene utilizzata per deallocare memoria per un oggetto di classe C++, il distruttore dell'oggetto viene chiamato prima di deallocazione della memoria dell'oggetto (se l'oggetto ha un distruttore).When delete is used to deallocate memory for a C++ class object, the object's destructor is called before the object's memory is deallocated (if the object has a destructor).

Se l'operando per il eliminare operatore è un l-value modificabile, il relativo valore è indefinito dopo che l'oggetto viene eliminato.If the operand to the delete operator is a modifiable l-value, its value is undefined after the object is deleted.

Utilizzo di deleteUsing delete

Esistono due varianti sintattiche per il operatore delete: uno per singoli oggetti e l'altro per le matrici di oggetti.There are two syntactic variants for the delete operator: one for single objects and the other for arrays of objects. Nel frammento di codice seguente viene illustrato in che modo differiscono:The following code fragment shows how these differ:

// expre_Using_delete.cpp  
struct UDType   
{  
};  

int main()  
{  
   // Allocate a user-defined object, UDObject, and an object  
   //  of type double on the free store using the  
   //  new operator.  
   UDType *UDObject = new UDType;  
   double *dObject = new double;  
   // Delete the two objects.  
   delete UDObject;  
   delete dObject;   
   // Allocate an array of user-defined objects on the  
   // free store using the new operator.  
   UDType (*UDArr)[7] = new UDType[5][7];  
   // Use the array syntax to delete the array of objects.  
   delete [] UDArr;  
}  

Nei due casi seguenti vengono prodotti risultati non definiti: utilizzando la forma per le matrici di eliminazione (delete [ ]) su un oggetto e utilizzando la forma per le non matrici di eliminazione su una matrice.The following two cases produce undefined results: using the array form of delete (delete [ ]) on an object and using the nonarray form of delete on an array.

EsempioExample

Per esempi di utilizzo eliminare, vedere operatore new.For examples of using delete, see new operator.

Funzionamento di deleteHow delete works

L'operatore delete richiama la funzione operatore delete.The delete operator invokes the function operator delete.

Per gli oggetti non di tipo classe (classe, struct, o union), viene richiamato l'operatore delete globale.For objects not of class type (class, struct, or union), the global delete operator is invoked. Per oggetti di tipo classe, il nome della funzione di deallocazione viene risolto in ambito globale se l'espressione delete inizia con l'operatore di risoluzione dell'ambito (::) unario.For objects of class type, the name of the deallocation function is resolved in global scope if the delete expression begins with the unary scope resolution operator (::). In caso contrario, l'operatore delete richiama il distruttore di un oggetto prima della deallocazione di memoria (se il puntatore non ha valore null).Otherwise, the delete operator invokes the destructor for an object prior to deallocating memory (if the pointer is not null). L'operatore delete può essere definito in base alle classi; se non è presente una definizione per una determinata classe, l'operatore delete globale viene richiamato.The delete operator can be defined on a per-class basis; if there is no such definition for a given class, the global operator delete is invoked. Se l'espressione delete viene utilizzata per deallocare un oggetto di classe di tipo statico con un distruttore virtuale, la funzione di deallocazione viene risolta dal distruttore virtuale di tipo dinamico dell'oggetto.If the delete expression is used to deallocate a class object whose static type has a virtual destructor, the deallocation function is resolved through the virtual destructor of the dynamic type of the object.

Vedere ancheSee also

Espressioni con operatori unari Expressions with Unary Operators
Parole chiave Keywords
Operatori new e deletenew and delete Operators