delete (Operador) (C++)
Desasigna un bloque de memoria.
Sintaxis
[
::
]delete
cast-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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de