Comment allouer dynamiquement un tableau en C++

Jinku Hu 12 octobre 2023
  1. Utiliser l’opérateur new() pour allouer dynamiquement un tableau en C++
  2. Utiliser la méthode std::unique_ptr pour allouer dynamiquement un tableau en C++
  3. Utilisez std::make_unique() Méthode pour allouer dynamiquement un tableau en C++
Comment 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;
Auteur: 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

Article connexe - C++ Array