¿La forma correcta de inicializar un puntero dinámico a una matriz multidimensional? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

Cómo trabajar correctamente con matrices multidimensionales asignadas dinámicamente en C ++ [duplicar] 1 respuesta

He tenido mala suerte con los punteros dinámicos cuando los extiendo a 2 dimensiones o más. Por ejemplo quiero un puntero a una matriz 2D. Yo sé eso:

int A[3][4];
int (*P)[4] = A;

Es completamente legítimo (incluso si no entiendo completamente por qué). Teniendo en cuenta que:

int *P = new int[4];

Funciona, me imaginaba que:

int **P = new int[5][7];

También funcionaría, pero no lo es. Este código indica el error:

Error: A value of type "(*)[7]" cannot be used to initialize an entity of
       type "int **"

Al ver esto, la nueva parte se convierte en un puntero a una matriz de 7 enteros que hice:

int (*P)[4] = new int[7][4];

Y esto funciona pero no es lo que quiero lograr. Al hacerlo así, estoy limitado a al menos usar un valor constante para cualquier dimensión posterior, pero quiero que esté completamente definido en el tiempo de ejecución y por lo tanto "dinámico".

¿Cómo podría ir y hacer funcionar este puntero multidimensional?

Respuestas a la pregunta(4)

Su respuesta a la pregunta