En C++, ¿qué significa si(p) eliminar[]p?
La función de esta operación es liberar la memoria apuntada por p si p no está vacía.
delete es una palabra clave en C++, su función es liberar memoria y su contraparte es la palabra clave new.
La nueva palabra clave puede aplicarse a una unidad de espacio, como
int * p = new int;
Se aplica a un espacio que tiene el tamaño del tipo int memoria y asigna la primera dirección al puntero p.
Cuando desee liberarlo después de su uso, debe llamar a
delete p;
La nueva palabra clave también puede aplicarse a un conjunto de espacios, como as
int *p = new int [10];
Solicite un conjunto de 10 espacios de tipo int y asígnelos al puntero p.
En este caso, debe llamar a
delete [] p;
Esta es la situación descrita en esta pregunta.
En cuanto a if(p), este método de escritura se hereda de C. La función de asignación de espacio utilizada en C es malloc y la función de liberación de espacio es free.
Cuando se llama a free y el parámetro es un puntero nulo (NULL), el programa fallará, por lo que generalmente se usa al liberar
if(p)free(p); Es decir, se libera sólo cuando p no está vacío.
La palabra clave de eliminación de C++ se ha optimizado para esto. Cuando el parámetro p es NULL, no se informará ningún error y no se realizará ninguna operación. Entonces, el if(p) aquí ya no es necesario. Sin embargo, después de usar la función gratuita de C, o los programadores que no comprenden las nuevas funciones de eliminación, agregarán if(p) para protección.