Gestión de memoria en la asignación de matriz 2-D

He asignado una matriz bidimensional usando el siguiente código:

// Dynamic allocation
        int **matrix=new int*[n];
        for(int i=0;i<n;i++)
        {
            matrix[i]=new int[n];
        }

Esto funciona bien

En primer lugar, asignamos una matriz de punteros enteros.Luego asignamos cada uno de los punteros anteriores para apuntar a una ubicación de memoria den enteros Esto crea nuestra matriz bidimensional.

Sé que un destructor para una matriz asignada dinámicamente debería verse así:

~SquareMatrix()
{
delete [] OneDarray;
}

El énfasis está en[] porque si no está escrito, solo se eliminará el primer elemento de la matriz.

Por motivos similares, creo que necesito colocar el[] dos veces para eliminar toda la matriz bidimensional, como

delete [] [] matrix;

Pero esto no funciona y da un error de tiempo de compilación.

¿Cuál es la forma correcta de hacerlo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta