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

C++ Dynamischer Speicher: Stack vs. Heap erklärt

Oft unbekannt, wie viel Speicher nötig ist – Größe erst zur Laufzeit bestimmbar.

new & delete Operatoren

Generische Syntax für new:

new datentyp;

datentyp: beliebiger Built-in-Typ, Array oder benutzerdefinierter Typ (Klasse/Struct).

Beispiel: Built-in Typ

double* pvalue = nullptr;
pvalue = new double;  // Speicher anfordern

Allokation kann fehlschlagen (Heap erschöpft). Gute Praxis: NULL-Check:

double* pvalue = nullptr;
if(!(pvalue = new double)) {
    cout << "Error: out of memory." << endl;
    exit(1);
}

malloc() (C) existiert noch, aber new bevorzugen – Vorteil: konstruiert Objekte (Kernzweck von C++).

Speicher freigeben mit delete:

delete pvalue;  // Speicher freigeben

Komplettbeispiel

#include <iostream>
using namespace std;
int main() {
    double* pvalue = nullptr;
    pvalue = new double;
    *pvalue = 29494.99;
    cout << "Value of pvalue: " << *pvalue << endl;
    delete pvalue;
    return 0;
}

Ausgabe: Value of pvalue: 29495

Dynamische Allokation für Arrays

Array von 20 chars:

char* pvalue = nullptr;
pvalue = new char[20];

Löschen: delete[] pvalue; (eckige Klammern nötig!)

Mehrdimensionales Array:

double** pvalue = nullptr;
pvalue = new double[3][4];  // 3x4 Array

Freigabe: delete[] pvalue; (Syntax gleich).

Dynamische Allokation für Objekte

Objekte wie einfache Datentypen. Beispiel: Array von Objekten:

#include <iostream>
using namespace std;
class Box {
public:
    Box() { cout << "Constructor called!" << endl; }
    ~Box() { cout << "Destructor called!" << endl; }
};
int main() {
    Box* myBoxArray = new Box[4];
    delete[] myBoxArray;
    return 0;
}

Konstruktor 4x aufgerufen, Destruktor 4x beim delete[].

Constructor called!
Constructor called!
Constructor called!
Constructor called!
Destructor called!
Destructor called!
Destructor called!
Destructor called!

C Sprache

  1. C++-Datentypen verstehen: Grundlagen, Modifizierer und Best Practices
  2. C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
  3. C++-Kommentare: Best Practices für lesbaren, wartbaren Code
  4. Dynamische Speicherverwaltung in C: calloc, malloc und free erklärt
  5. C++ Programmiersprache: Überblick & Kernfeatures
  6. C++ Konstanten & Literale: Typen, Syntax & Best Practices
  7. C++ Operatoren: Typen, Nutzung & Best Practices
  8. C++ Numerische Typen: Praktischer Leitfaden
  9. C++ Referenzen: Konzepte & Unterschiede zu Pointern
  10. C++ Dynamischer Speicher: Stack vs. Heap erklärt