Cómo asignar dinámicamente un array en C++
-
Utiliza el
new()
operador para asignar dinámicamente un array en C++ -
Usa el método
std::unique_ptr
para asignar dinámicamente el array en C++ -
Usa el método
std::make_unique()
para asignar dinámicamente el 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;
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