удалить многомерные массивы

В C ++ FAQ [16.16] дает следующий пример:

void manipulateArray(unsigned nrows, unsigned ncols[])
{
   typedef Fred* FredPtr;
   FredPtr* matrix = new FredPtr[nrows];

   // Set each element to NULL in case there is an exception later.
   // (See comments at the top of the try block for rationale.)
   for (unsigned i = 0; i < nrows; ++i)
       matrix[i] = NULL;
   try {
     for (unsigned i = 0; i < nrows; ++i)
     matrix[i] = new Fred[ ncols[i] ];
     for (unsigned i = 0; i < nrows; ++i) {
        for (unsigned j = 0; j < ncols[i]; ++j) {
         someFunction( matrix[i][j] );
         }
      }

     if (today == "Tuesday" && moon.isFull()) {
       for (unsigned i = nrows; i > 0; --i)
        delete[] matrix[i-1];
       delete[] matrix;
       return;
     }

 ...code that fiddles with the matrix...

    }
  catch (...) {
     for (unsigned i = nrows; i > 0; --i)
      delete[] matrix[i-1];
      delete[] matrix;
       throw;    // Re-throw the current exception
   }

  for (unsigned i = nrows; i > 0; --i)
     delete[] matrix[i-1];
     delete[] matrix;
  }

Почему мы должны использовать удаление таким образом, я имею в виду,

Первыйdelete[] matrix[i-1]; тогдаdelete[] matrix;

Более того, какой смысл после всего цикла «попробуй… поймать», нам все еще нужно

for (unsigned i = nrows; i > 0; --i)
   delete[] matrix[i-1];
   delete[] matrix;

в конце этой функции.

Ответы на вопрос(3)

Ваш ответ на вопрос