Estoy de acuerdo con Jason Cohen, aunque podemos aclarar un poco el motivo por el que necesitamos eliminar los punteros con el ciclo. Para cada asignación de memoria "nueva" o dinámica, debe haber una "eliminación" de una asignación de memoria. Algunas veces la "eliminación" puede ocultarse, como con los smartpointers, pero aún está allí.
int main()
{
int *pI = new int;
int *pArr = new int[10];
Hasta ahora en el código hemos asignado dos trozos de memoria dinámica. El primero es solo un int general, el segundo es un conjunto de ints.
delete pI;
delete [] pArr;
estas instrucciones delete borrar la memoria que fue asignada por el "nuevo" s
int ppArr = new int *[10];
for(int indx = 0; indx < 10; ++indx)
{
ppArr[indx] = new int;
}
Este bit de código está haciendo tanto de las asignaciones anteriores. Primero, estamos creando espacio para nuestro int en una matriz dinámica. Luego, debemos recorrer y asignar un int para cada punto de la matriz.
for(int indx = 0; indx < 10; ++indx)
{
delete ppArr[indx];
}
delete [] ppArr;
Observe el orden en que asigné esta memoria y luego la desasigné en el orden inverso. Esto es porque si tuviéramos que hacer el delete [] ppArr; primero perderíamos la matriz que nos dice cuáles son nuestros otros indicadores. Ese trozo o memoria se devolvería al sistema y, por lo tanto, ya no se puede leer con fiabilidad.
int a=0;
int b=1;
int c=2;
ppArr = new int *[3];
ppArr[0] = &a;
ppArr[1] = &b;
ppArr[2] = &c;
Esto, creo, debería mencionarse también. El hecho de que esté trabajando con punteros no significa que la memoria a la que apuntan esos punteros haya sido asignada dinámicamente. Es decir, solo porque tenga un puntero no significa que necesariamente deba eliminarse. La matriz que creé aquí está asignada dinámicamente, pero los punteros apuntan a instancias locales de ints. Cuando eliminamos esto, solo necesitamos eliminar la matriz.
delete [] ppArr;
return 0;
}
Al final de memoria asignada dinámicamente puede ser complicado y de todos modos se puede envolver de manera segura como en un puntero inteligente o mediante el uso de contenedores STL en lugar de su cuenta puede hacer su vida mucho más agradable.
¡Bonito, no sabía sobre eso! – Frank