A maneira correta de inicializar um ponteiro dinâmico para uma matriz multidimensional? [duplicado]

Esta questão já tem uma resposta aqui:

Como trabalhar corretamente com matrizes multidimensionais dinamicamente alocadas em C ++ [duplicado] 1 resposta

Tenho tido azar com os ponteiros dinâmicos quando os alcanço em 2 dimensões ou mais. Por exemplo, eu quero um ponteiro para um array 2D. Eu sei disso:

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

É completamente legítimo (mesmo que eu não entenda completamente o porquê). Levando em consideração que:

int *P = new int[4];

funciona, imaginei que:

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

Também funcionaria, mas não é. Este código indica o erro:

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

Ao ver isso, a nova parte se torna um ponteiro para uma matriz de 7 inteiros que fiz:

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

E isso funciona, mas não é o que eu quero realizar. Fazendo assim, estou limitado a pelo menos usar um valor constante para qualquer dimensão subseqüente, mas quero que seja totalmente definido em tempo de execução e, portanto, "dinâmico".

Como eu poderia fazer esse ponteiro multidimensional funcionar?

questionAnswers(4)

yourAnswerToTheQuestion