Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++ Speicherverwaltung meistern: Experten-Einsatz von new und delete

C++ Speicherverwaltung meistern: Experten-Einsatz von new und delete

Dieser Leitfaden erklärt, wie man Heap-Speicher in C++ mit new und delete allokiert und freigibt, illustriert durch klare, praxisnahe Beispiele.

C++ gibt Entwicklern die Möglichkeit, Speicher zur Laufzeit zu allokieren – bekannt als dynamische Speicherallokation. Im Gegensatz zu verwalteten Sprachen wie Java oder Python gibt C++ Heap-Speicher nicht automatisch frei; der Programmierer muss ihn explizit freigeben.

Die Operatoren new und delete bieten den grundlegenden Mechanismus für diese Aufgabe. Diese Operatoren sind der Eckpfeiler der manuellen Speicherverwaltung in C++ und in der C++ Standardbibliothek definiert.


Der new Operator

Der new Operator allokiert einen Speicherblock auf dem Heap und gibt einen Zeiger auf sein erstes Byte zurück. Zum Beispiel:

// int-Zeiger deklarieren int* pointVar; // Speicher dynamisch mit new allokieren pointVar = new int; // Wert dem allokierten Speicher zuweisen *pointVar = 45;

In diesem Snippet erhält pointVar die Adresse eines neu allokierten int. Da new einen Zeiger zurückgibt, muss die Variable vom Zeigertyp sein. Für Arrays gibt new einen Zeiger auf das erste Element zurück:

int* arr = new int[10]; // arr zeigt auf das erste Element eines Arrays von 10 ints 

Die allgemeine Syntax lautet:

pointerVariable = new dataType; // einzelnes Objekt pointerVariable = new dataType[size]; // Array 

Der delete Operator

Wenn ein Objekt oder Array, das mit new allokiert wurde, nicht mehr benötigt wird, sollte delete aufgerufen werden, um den Speicher an das Betriebssystem zurückzugeben. Das Versäumnis dazu führt zu Speicherlecks, die die Leistung beeinträchtigen oder die Anwendung abstürzen lassen können.

Für ein einzelnes Objekt:

delete pointerVariable;

Für ein mit new[] allokiertes Array verwenden Sie die Array-Form:

delete[] pointerVariable;

Beispiel für einen vollständigen Lebenszyklus:

// int allokieren int* pointVar = new int; *pointVar = 45; cout << *pointVar; // Ausgabe: 45 // freigeben delete pointVar;

Tipp: Paaren Sie jedes new mit einem entsprechenden delete (oder delete[] für Arrays). Nutzen Sie RAII oder Smart Pointers (z. B. std::unique_ptr), um diesen Prozess in Produktionscode zu automatisieren.


Beispiel 1: Grundlegende dynamische Allokation

#include <iostream> using namespace std; int main() { int* pointInt; float* pointFloat; pointInt = new int; pointFloat = new float; *pointInt = 45; *pointFloat = 45.45f; cout << *pointInt << endl; cout << *pointFloat << endl; delete pointInt; delete pointFloat; return 0; }

Ausgabe

45 45.45

Dieses Programm demonstriert die Allokation zweier primitiver Typen, Zuweisung, Ausgabe und saubere Freigabe.

Hinweis: Dynamische Allokation kann die Flexibilität verbessern, besonders wenn die Größe zur Laufzeit bestimmt wird.


Beispiel 2: Array von Floats allokieren

#include <iostream> using namespace std; int main() { int num; cout << "Gesamtzahl der Studenten eingeben: "; cin >> num; float* ptr = new float[num]; cout << "Notendurchschnitt der Studenten eingeben." << endl; for (int i = 0; i < num; ++i) { cout << "Student" << i + 1 << ": "; cin >> *(ptr + i); } cout << "\nNotendurchschnitt der Studenten anzeigen." << endl; for (int i = 0; i < num; ++i) { cout << "Student" << i + 1 << " :" << *(ptr + i) << endl; } delete[] ptr; return 0; }

Ausgabe

Gesamtzahl der Studenten eingeben: 4 Notendurchschnitt der Studenten eingeben. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Notendurchschnitt der Studenten anzeigen. Student1 :3.6 Student2 :3.1 Student3 :3.9 Student4 :2.9

Das Programm fragt den Benutzer nach der Anzahl der Studenten, allokiert entsprechend ein Float-Array, sammelt Eingaben, zeigt die Daten an und gibt schließlich den Speicher mit delete[] frei.


Beispiel 3: Dynamische Allokation eines Objekts

#include <iostream> using namespace std; class Student { int age; public: Student() : age(12) {} void getAge() { cout << "Alter = " << age << endl; } }; int main() { Student* ptr = new Student(); ptr->getAge(); delete ptr; return 0; }

Ausgabe

Alter = 12

Dieses Beispiel erstellt ein Student-Objekt auf dem Heap. Der Konstruktor initialisiert age auf 12, und die getAge-Methode gibt es aus. Nach der Verwendung gibt delete den Speicher des Objekts frei.

C Sprache

  1. Digitaler Speicher Grundlagen: Adressierung, Zugriff und Volatilität
  2. C++-Variablen, Literale und Konstanten meistern: Ein umfassender Leitfaden
  3. C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
  4. C++ Vererbung: Public, Protected & Private erklärt
  5. C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
  6. Verzeichnis- und Dateioperationen in Python meistern
  7. C++ Structures vs. Classes: Praktischer Leitfaden für Embedded-Entwickler
  8. Raspberry Pi 3 B+ – Aktualisierte Features, Specs & Kaufberatung
  9. GE Digital stellt Predictive Asset Management Software vor: Shift von reaktiv zu proaktiv
  10. Wittmann Battenfeld präsentiert neue X-Serie und Primus 14 Roboter