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í.