delete es una palabra clave del lenguaje de programación C++ , que se introdujo originalmente en el estándar para gestionar la liberación de memoria asignada por new. En el estándar C ++ 11 modernizado , a la palabra clave deletetambién se le asignó el rol de un especificador de acceso para funciones de miembros de clases especiales , lo que prohíbe su uso [1] .
En el lenguaje de programación C++ , el operador deletedevuelve la memoria asignada por el operador newal montón . La llamada deletedebe ocurrir para cada llamada newpara evitar pérdidas de memoria . Después de la llamada delete, el objeto que apunta a esta área de memoria deja de ser válido y ya no debe utilizarse. Muchos programadores asignan 0 (puntero nulo) a los punteros después de usarlos deletepara minimizar los errores de programación. La eliminación del puntero nulo no tiene ningún efecto real, por lo que no es necesario verificar la igualdad del puntero en 0 antes de llamar delete(tal verificación es parte del algoritmo del operador delete).
Fragmento de código como ejemplo:
int * p_var = nullptr ; // declaración de un nuevo puntero p_var = new int ; // la memoria se asigna dinámicamente /* ....... resto del código ........*/ eliminar p_var ; // la memoria se libera p_var = nullptr ; // el puntero se reemplaza por un puntero nuloLos arreglos creados (asignados) con new [], pueden ser destruidos (desasignados) de manera similar con delete []:
tamaño int = 10 ; int * p_var = nullptr ; // declaración de un nuevo puntero p_var = new int [ tamaño ]; // la memoria se asigna dinámicamente /* ...... resto del código ........*/ borrar [] p_var ; // la memoria se libera p_var = nullptr ; // el puntero se reemplaza por un puntero nuloLlamar delete[]a una matriz de objetos llamará al destructor de cada objeto antes de liberar la memoria asignada para la matriz.
Con el desarrollo del lenguaje C++ y la estandarización de la tecnología RAIInew en los productos de software modernos, no se deleterecomienda el uso de operaciones y asignación de memoria manual [2] .
En el estándar del lenguaje C++11, deletese amplió el contexto para usar la palabra clave y comenzó a usarse no solo como una operación junto con la operación new, sino también como un especificador junto con la palabra clave default. En este rol, la función del especificador deletese ha convertido en una restricción explícita de acceso a métodos de clase especiales ( constructores , destructores , constructores de movimiento, operadores de asignación, etc.) El defaultespecificador le permite especificar el método de clase que se le indica al compilador . para usar por defecto [1] .