Comment allouer dynamiquement un tableau en C++
-
Utiliser l’opérateur
new()
pour allouer dynamiquement un tableau en C++ -
Utiliser la méthode
std::unique_ptr
pour allouer dynamiquement un tableau en C++ -
Utilisez
std::make_unique()
Méthode pour allouer dynamiquement un tableau en C++
Cet article présente plusieurs méthodes pour allouer dynamiquement un tableau en C++.
Utiliser l’opérateur new()
pour allouer dynamiquement un tableau en C++
Le new
opérateur alloue l’objet sur la mémoire du hap
de façon dynamique et retourne un pointeur vers l’emplacement. Dans cet exemple de programme, nous déclarons le tableau de caractères constants et la taille comme une variable int
. Ensuite, nous allouons dynamiquement le tableau de char
et nous attribuons les valeurs correspondantes à ses éléments dans le corps de la boucle for
.
Notez que l’opérateur delete
doit être explicitement appelé une fois que la mémoire associée au pointeur arr
n’est plus nécessaire. Les crochets spécifiés après l’opérateur delete
indiquent au compilateur que le pointeur se réfère au premier élément d’un tableau. Si les crochets sont omis lors de la suppression d’un pointeur vers un tableau, le comportement est indéfini.
#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;
}
Production:
B; a; d; C; T; L; A; R; e; I;
Utiliser la méthode std::unique_ptr
pour allouer dynamiquement un tableau en C++
Une autre façon d’allouer un tableau dynamique est d’utiliser le pointeur intelligent std::unique_ptr
, qui fournit une interface de gestion de la mémoire plus sûre. On dit que la fonction unique_ptr
possède l’objet qu’elle pointe ; en retour, l’objet est détruit dès que le pointeur sort du champ d’application. Contrairement aux pointeurs classiques, le pointeur intelligent n’a pas besoin que l’opérateur delete
soit appelé par un programmeur ; il est plutôt appelé implicitement lorsque l’objet est détruit.
#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;
}
Production:
B; a; d; C; T; L; A; R; e; I;
Utilisez std::make_unique()
Méthode pour allouer dynamiquement un tableau en C++
La fonction make_unique
est une alternative plus contemporaine pour gérer la mémoire dynamique. Cette méthode alloue dynamiquement un objet d’un type donné et retourne le pointeur intelligent std::unique_ptr
. Le type de l’objet est spécifié comme le paramètre de modèle. D’autre part, le tableau char
de taille fixe est alloué et assigné à la variable de type auto
dans l’exemple suivant :
#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;
}
Production:
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