En C++, si tengo un array de punteros tengo que borrar cada uno de ellos adema? de borrar el array

Objeto* array[5];
//...lo uso
for(int i=0;i<5;i++){
delete array[i];
}
delete[] array;

Sin embargo, esta última línea – al menos en Visual C++ – da un warning

warning C4154: deletion of an array expression; conversion to pointer supplied

ésto se debe a que array no es en sí un puntero >>, por lo tanto el compilador lo convierte a

delete[] &array;

Sin embargo, ¿tiene que serlo?
Sí si es que la  memoria para el array es asignada dinámicamente. En ese caso, además de la expresión anterior, se podría reemplazar por

Objeto** array = new Objeto*[5]; //nótese **
//...
delete[] array;

No, en cambio, si es que el arreglo tiene tamaño fijo. En este caso debemos borrar sus celdas como arriba (porque es un arreglo de punteros) pero no es necesario borrar el arreglo en sí.

Este sitio utiliza cookies.    Leer más