Atribuir dinamicamente um Array em C++

Jinku Hu 12 outubro 2023
  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++
Atribuir dinamicamente um 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;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Array