Wie Sie ein Array in C++ dynamisch zuweisen

Jinku Hu 12 Oktober 2023
  1. Verwendung von den new()-Operator zur dynamischen Zuweisung eines Arrays in C++
  2. Verwendung von die Methode std::unique_ptr zur dynamischen Zuweisung von Arrays in C++
  3. Verwendung von die Methode std::make_unique() zur dynamischen Zuweisung von Arrays in C++
Wie Sie ein Array in C++ dynamisch zuweisen

Dieser Artikel demonstriert mehrere Methoden zur dynamischen Zuweisung eines Arrays in C++.

Verwendung von den new()-Operator zur dynamischen Zuweisung eines Arrays in C++

Der new Operator allokiert das Objekt auf dem heap-Speicher dynamisch und gibt einen Zeiger auf die Stelle zurück. In diesem Beispielprogramm deklarieren wir das konstante Character-Array und die konstante Größe als int Variable. Dann weisen wir das char-Array dynamisch zu und weisen seinen Elementen im for-Schleifenkörper die entsprechenden Werte zu.

Beachten Sie, daß der delete-Operator explizit aufgerufen werden muß, sobald der mit dem arr-Zeiger verbundene Speicher nicht mehr benötigt wird. Die angegebenen Klammern hinter dem delete-Operator teilen dem Compiler mit, daß der Zeiger auf das erste Element eines Arrays verweist. Wenn die Klammern beim Löschen eines Zeigers auf ein Array weggelassen werden, ist das Verhalten undefiniert.

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

Ausgabe:

B; a; d; C; T; L; A; R; e; I;

Verwendung von die Methode std::unique_ptr zur dynamischen Zuweisung von Arrays in C++

Eine andere Möglichkeit, ein dynamisches Array zuzuweisen, ist die Verwendung des intelligenten Zeigers std::unique_ptr, der eine sicherere Speicherverwaltungsschnittstelle bietet. Der Funktion unique_ptr wird nachgesagt, dass sie das Objekt besitzt, auf das sie zeigt; im Gegenzug wird das Objekt zerstört, sobald der Zeiger den Anwendungsbereich verlässt. Im Gegensatz zu den regulären Zeigern braucht der Smart-Pointer nicht den delete-Operator, der von einem Programmierer aufgerufen werden muss; stattdessen wird er implizit aufgerufen, wenn das Objekt zerstört wird.

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

Ausgabe:

B; a; d; C; T; L; A; R; e; I;

Verwendung von die Methode std::make_unique() zur dynamischen Zuweisung von Arrays in C++

Die Funktion make_unique ist eine zeitgemäßere Alternative zur Handhabung der dynamischen Speicherverwaltung. Diese Methode weist ein Objekt eines bestimmten Typs dynamisch zu und gibt den intelligenten Zeiger std::unique_ptr zurück. Der Typ des Objekts wird wie der Template-Parameter angegeben. Auf der anderen Seite wird im folgenden Beispiel das char-Array fester Größe alloziert und der Variablen vom Typ auto zugewiesen:

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

Ausgabe:

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

Verwandter Artikel - C++ Array