delete (Operador) (C++)

Desasigna un bloque de memoria.

Sintaxis

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

Comentarios

El argumento cast-expression debe ser un puntero a un bloque de memoria asignado previamente para un objeto creado con el operador new. El operador delete tiene un resultado de tipo void y, por tanto, no devuelve ningún valor. Por ejemplo:

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

El uso de delete en un puntero a un objeto no asignado con new tiene resultados impredecibles. Sin embargo, se puede usar delete en un puntero con el valor 0. Esta disposición significa que, cuando new devuelve 0 en caso de error, la eliminación del resultado de una operación new errónea es inofensiva. Para más información, consulte Los operadores "new" y "delete".

Los operadores new y delete también se pueden usar con tipos integrados, incluidas las matrices. Si pointer hace referencia a una matriz, ponga corchetes vacíos ([]) delante de pointer:

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

El uso del operador delete en un objeto desasigna su memoria. Un programa que desreferencia un puntero después de eliminarse el objeto puede producir resultados impredecibles o bloquearse.

Cuando se usa delete para desasignar memoria para un objeto de clase de C++, se llama al destructor del objeto antes de que se desasigne la memoria del objeto (si el objeto tiene un destructor).

Si el operando del operador delete es un valor I modificable, su valor es indefinido después de que se elimina el objeto.

Si se especifica la opción del compilador /sdl (Habilitar comprobaciones de seguridad adicionales), el operando al operador delete se establece en un valor no válido después de eliminar el objeto.

Usar delete

Hay dos variantes sintácticas para el operador delete: una para objetos únicos y la otra para matrices de objetos. En el fragmento de código siguiente se muestran las diferencias entre ellas:

// 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;
}

Los dos casos siguientes generan resultados indefinidos: usando la forma de matriz de delete (delete []) en un objeto y usando la forma no de matriz de delete en una matriz.

Ejemplo

Para ver ejemplos de uso de delete, consulte operador new.

Cómo eliminar trabajos

El operador delete invoca la función operator delete.

Para los objetos que no son de tipo de clase (clase, struct o unión), se invoca el operador delete global. Para los objetos de tipo de clase, el nombre de la función de desasignación se resuelve en el ámbito global si la expresión de eliminación comienza con el operador unario de resolución de ámbito (::). Si no, el operador delete invoca el destructor de un objeto antes de la desasignación de memoria (si el puntero no es nulo). El operador delete puede definirse clase por clase; si no existe esta definición para una clase determinada, se invoca el operador delete global. Si la expresión de eliminación se utiliza para desasignar un objeto de clase cuyo de tipo estático tenga un destructor virtual, la función de desasignación se resuelve mediante el destructor virtual del tipo dinámico del objeto.

Consulte también

Expresiones con operadores unarios
Palabras clave
Operadores new y delete