Allocare dinamicamente un array in C++
-
Usa l’operatore
new()
per allocare dinamicamente array in C++ -
Usa il metodo
std::unique_ptr
per allocare dinamicamente array in C++ -
Usa il metodo
std::make_unique()
per allocare dinamicamente array in C++
In questo articolo vengono illustrati più metodi su come allocare dinamicamente un array in C++.
Usa l’operatore new()
per allocare dinamicamente array in C++
L’operatore new
alloca dinamicamente l’oggetto sulla memoria heap
e restituisce un puntatore alla posizione. In questo programma di esempio, dichiariamo la matrice e la dimensione dei caratteri costanti come una variabile int
. Quindi, allochiamo dinamicamente l’array char
e assegniamo i valori corrispondenti ai suoi elementi nel corpo del cicli for
.
Notare che l’operatore delete
deve essere chiamato esplicitamente una volta che la memoria associata al puntatore arr
non è più necessaria. Le parentesi specificate dopo l’operatore delete
dicono al compilatore che il puntatore si riferisce al primo elemento di un array. Se le parentesi vengono omesse quando si elimina un puntatore a un array, il comportamento non è definito.
#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;
}
Produzione:
B; a; d; C; T; L; A; R; e; I;
Usa il metodo std::unique_ptr
per allocare dinamicamente array in C++
Un altro modo per allocare un array dinamico è usare il puntatore intelligente std::unique_ptr
, che fornisce un’interfaccia di gestione della memoria più sicura. Si dice che la funzione unique_ptr
possiede l’oggetto che punta; in cambio, l’oggetto viene distrutto una volta che il puntatore esce dall’ambito. Contrariamente ai normali puntatori, il puntatore intelligente non ha bisogno dell’operatore delete
per essere chiamato da un programmatore; invece, viene chiamato implicitamente quando l’oggetto viene distrutto.
#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;
}
Produzione:
B; a; d; C; T; L; A; R; e; I;
Usa il metodo std::make_unique()
per allocare dinamicamente array in C++
La funzione make_unique
è un’alternativa più contemporanea per gestire la gestione dinamica della memoria. Questo metodo alloca dinamicamente un oggetto di un dato tipo e restituisce il puntatore intelligente std::unique_ptr
. Il tipo di oggetto viene specificato come il parametro del modello. D’altra parte, l’array char
di dimensione fissa viene allocato e assegnato alla variabile di tipo auto
nel seguente esempio:
#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;
}
Produzione:
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