Arrays dinâmicos
Em cursos anteriores sobre arrays, vimos como criar um array como este:
const int Nmax = 1000;
int A[Nmax];
ou isto:
intA[1000];
Este método cria um array estático. Uma desvantagem é que o tamanho e o tipo dos elementos da matriz não podem ser alterados enquanto o programa está em execução.
No exemplo acima, um array estático de 1000 elementos é criado. Ou seja, uma área é alocada na memória para armazenar 1000 elementos do tipo int (um array de 1000 elementos do tipo int ). O endereço do início do array é armazenado na variável A . Se você precisar processar um array de mais de 1000 elementos, terá que alterar a descrição e recompilar o programa novamente. Ao trabalhar com arrays pequenos, a maior parte da memória alocada para um array estático será desperdiçada.
Para o uso eficiente da memória do computador, é necessário alocá-la dinamicamente. Em outras palavras, a memória para objetos deve ser alocada durante a execução do programa conforme necessário (criação de novos objetos).
Em C++, as operações new e delete são projetadas para alocar dinamicamente a memória do computador. Operação novo aloca memória da área de memória livre, e a operação excluir desaloca a memória alocada.
Um exemplo de criação e exclusão de uma variável dinâmica
int *A = novo int; // cria um objeto do tipo int
*A = 15; // a inicialização do objeto ocorre através de um ponteiro (*)
// a inicialização pode ser feita imediatamente
// ao declarar um objeto dinâmico
int *B = novo int(25);
cout << *A << " " << *B; // valor de saída por ponteiro
deleteA; // libera memória alocada
excluir B;
A operação new cria um objeto do tipo fornecido, aloca memória para ele e retorna um ponteiro do tipo correto para o local de memória fornecido. Se a memória não puder ser alocada, por exemplo, se não houver áreas livres, será retornado um ponteiro nulo, ou seja, o ponteiro retornará o valor 0. A alocação de memória é possível para qualquer tipo de dado: int , float , double , char etc.
Da mesma forma, em C++ você pode criar um array dinâmico que usará alocação dinâmica de memória. O tamanho de tal array, que pode ser usado durante a execução do programa, por exemplo, a partir do teclado, para criar variáveis dinâmicas.
Na sintaxe C
intN;
scanf("%d", &N);
int *mas = malloc (sizeof(int) * N);
// depois para redimensionar o array
// usado por realloc .
...
grátis(mas); // libera a memoria alocada
Na sintaxe C++
intN;
cin>> N;
int*A = novo int[N];
// para alterar o tamanho do array, você pode
// transfere dados para outro array e limpa o antigo
...
excluir []mas; // libera a memoria alocada
// colchetes indicam
// que estamos liberando memória sob o array
|