Cómo asignar dinámicamente un array en C++

Jinku Hu 12 octubre 2023
  1. Utiliza el new() operador para asignar dinámicamente un array en C++
  2. Usa el método std::unique_ptr para asignar dinámicamente el array en C++
  3. Usa el método std::make_unique() para asignar dinámicamente el array en C++
Cómo asignar dinámicamente un array en C++

Este artículo demuestra múltiples métodos sobre cómo asignar dinámicamente un array en C++.

Utiliza el new() operador para asignar dinámicamente un array en C++

El new() operador asigna el objeto en la memoria de heap de forma dinámica y devuelve un puntero a la ubicación. En este programa de ejemplo, declaramos el array de caracteres constantes y el tamaño como una variable int. Luego, asignamos dinámicamente el array char y asignamos los valores correspondientes a sus elementos en el cuerpo del bucle for.

Ten en cuenta que el operador delete debe ser llamado explícitamente una vez que la memoria asociada al puntero arr ya no sea necesaria. Los corchetes especificados después del operador delete le dicen al compilador que el puntero se refiere al primer elemento de un array. Si se omiten los corchetes cuando se borra un puntero a un array, el comportamiento es 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;

Usa el método std::unique_ptr para asignar dinámicamente el array en C++

Otra forma de asignar un array dinámico es usar el puntero inteligente std::unique_ptr, que proporciona una interfaz de administración de memoria más segura. Se dice que la función unique_ptr es dueña del objeto que apunta; a cambio, el objeto se destruye una vez que el puntero se sale del alcance. Al contrario que los punteros regulares, el smart pointer no necesita que el operador delete sea llamado por un programador, sino que es llamado implícitamente cuando el objeto es destruido.

#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;

Usa el método std::make_unique() para asignar dinámicamente el array en C++

La función make_unique es una alternativa más contemporánea para manejar la gestión de la memoria dinámica. Este método asigna dinámicamente un objeto de un tipo dado y devuelve el puntero inteligente std::unique_ptr. El tipo del objeto se especifica como el parámetro de la plantilla. Por otro lado, el array char de tamaño fijo se asigna y se asigna a la variable de tipo auto en el siguiente ejemplo:

#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

Artículo relacionado - C++ Array