/ Alocação dinâmica para matriz de ponteiros e suas alternativas - c ++, arrays, ponteiros, gerenciamento de memória, alocação dinâmica

Alocação dinâmica para uma matriz de ponteiros e suas alternativas - c ++, matrizes, ponteiros, gerenciamento de memória, alocação dinâmica

A maneira padrão de alocar array usando new int é:

 int* arr = new int[50];

ao declarar desta maneira, haverá alocação de memória contígua e haverá uma única variável de matriz na pilha de variáveis.

se eu quiser declará-lo na forma de 50variáveis ​​de ponteiro diferentes para que cada ponteiro tenha um endereço de memória diferente e não necessariamente contíguo a maneira mais óbvia de usá-lo é:

int * arr[50];

mas desta forma, qual seria o comando / código para atribuir memória (ou seja, via novo int) e quais são as desvantagens ou vantagens de declarar de cada maneira.

Respostas:

6 para resposta № 1

O caminho óbvio seria iterar todos os elementos e alocar memória para eles:

for (int i = 0; i < 50; i++){
arr[i] = new int;
}

A desvantagem de um pedaço de memória não contíguo seria a falta de cache. Você pode ler mais sobre isso Aqui.


3 para resposta № 2

Como atribuir, já é mencionado em esta resposta; Daí não se repetir.
Para solteira int alocação, sua linha abaixo é um exagero:

int* arr[50];  // all downsides only

Em vez disso, você deve usar números inteiros simples:

int arr[50];

Melhor utilizar instalações por contêineres padrão, como:

std::vector<int> vi;  // if the number of int-s are dynamic
std::array<int, 50> ai; // if the number of int-s are fixed

Finalmente, de esta resposta,

"Evite ponteiros até que você possa" ... Então, a regra básica é usar ponteiros apenas se não houver outra escolha. "