Atribuir dinamicamente um Array em C++

  1. Utilizar o new() Operador para Alocar Dinamicamente um Array em C++
  2. Utilizar o método std::unique_ptr para Atribuir Dinamicamente o Array em C++
  3. Utilize std::make_unique() Método para Alocar Dinamicamente o Array em C++

Este artigo demonstra múltiplos métodos sobre como alocar dinamicamente um array em C++.

Utilizar o new() Operador para Alocar Dinamicamente um Array em C++

O operador new atribui dinamicamente o objecto na memória do heap e devolve um ponteiro ao local. Neste programa de exemplo, declaramos a matriz de caracteres constante e o tamanho como uma variável de int. Em seguida, alocamos dinamicamente a matriz de caracteres e atribuímos os valores correspondentes aos seus elementos no corpo do laço for.

Note-se que o operador delete deve ser explicitamente chamado assim que a memória associada ao ponteiro arr já não seja necessária. Os parênteses especificados após o operador delete dizem ao compilador que o ponteiro se refere ao primeiro elemento de um array. Se os parênteses forem omitidos ao apagar um ponteiro para um array, o comportamento é indefinido.

#include <iostream>

using std::cout;
using std::endl;

constexpr int SIZE = 10;
static const char chars[] =
        { 'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I' };

int main()
{
    char *arr = new char[SIZE];

    for(int i = 0; i < SIZE; ++i) {
        arr[i] = chars[i];
        cout << arr[i] << "; ";
    }
    cout << endl;

    delete [] arr;
    return EXIT_SUCCESS;
}

Resultado:

B; a; d; C; T; L; A; R; e; I;

Utilizar o método std::unique_ptr para Atribuir Dinamicamente o Array em C++

Outra forma de atribuir um array dinâmica é utilizar o std::unique_ptr smart pointer, que fornece uma interface de gestão de memória mais segura. Diz-se que a função unique_ptr é propriedade do objecto que aponta; em troca, o objecto é destruído assim que o ponteiro sai do âmbito. Ao contrário dos apontadores regulares, o ponteiro inteligente não precisa que o operador delete seja chamado por um programador; em vez disso, é chamado implicitamente quando o objecto é destruído.

#include <iostream>
#include <memory>

using std::cout;
using std::endl;

constexpr int SIZE = 10;
static const char chars[] =
        { 'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I' };

int main()
{
    std::unique_ptr<char[]> arr(new char[SIZE]);

    for(int i = 0; i < SIZE; ++i) {
        arr[i] = chars[i];
        cout << arr[i] << "; ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

B; a; d; C; T; L; A; R; e; I;

Utilize std::make_unique() Método para Alocar Dinamicamente o Array em C++

A função make_unique é uma alternativa mais contemporânea para lidar com a gestão dinâmica da memória. Este método aloca dinamicamente um objecto de um determinado tipo e devolve o std::unique_ptr smart pointer. O tipo do objecto é especificado como o parâmetro do modelo. Por outro lado, o array char de tamanho fixo é atribuído e atribuído à variável de tipo auto no exemplo seguinte:

#include <iostream>
#include <memory>

using std::cout;
using std::endl;

constexpr int SIZE = 10;
static const char chars[] =
        { 'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I' };

int main()
{
    auto arr = std::make_unique<char[]>(SIZE);

    for(int i = 0; i < SIZE; ++i) {
        arr[i] = chars[i];
        cout << arr[i] << "; ";
    }
    cout << endl;

    return EXIT_SUCCESS;
}

Resultado:

B; a; d; C; T; L; A; R; e; I;

Artigo relacionado - C++ Array

  • Obter Comprimento do Array em C++
  • Elementos de Deslocamento em Array em C++