Como declarar um array dinâmico bidimensional em C++ usando o operador new?
Olá! Acabei de começar a estudar C++ e me deparei com um problema. Preciso criar um array bidimensional cujo tamanho será conhecido apenas durante a execução do programa. Sei como declarar um array bidimensional estático: `int arr[3][4];`, mas quando tento usar tamanhos variáveis, o compilador reclama.
Tentei este código:
```cpp
int rows = 5, cols = 10;
int arr[rows][cols]; // Erro! Precisa de uma constante em tempo de compilação
```
Li sobre memória dinâmica e entendi que preciso usar `new`. Mas como alocar memória corretamente para um array bidimensional? Vi várias opções na internet, mas todas são diferentes. Alguns usam um array de ponteiros, outros alocam um único bloco grande de memória.
Por favor, escreva uma maneira correta e confiável de criar um array bidimensional usando `new`. Estou especialmente interessado em:
1. Como alocar memória.
2. Como acessar os elementos.
3. Como liberar memória corretamente (para evitar vazamentos).
4. Qual método é considerado a melhor prática em C++ moderno?