C++ Geheugenbeheer meesteren: Expert gebruik van new en delete
C++ Geheugenbeheer meesteren: Expert gebruik van new en delete
Deze gids legt uit hoe heap-geheugen in C++ toe te wijzen en vrij te geven met new en delete, geïllustreerd door duidelijke, real-world voorbeelden.
C++ geeft ontwikkelaars de macht om geheugen tijdens runtime toe te wijzen - bekend als dynamische geheugenallocatie. In tegenstelling tot beheerde talen zoals Java of Python, herwint C++ heap-geheugen niet automatisch; de programmeur moet het expliciet vrijgeven.
Het gebruik van de new en delete operatoren biedt het basismechanisme voor deze taak. Deze operatoren zijn de hoeksteen van handmatig geheugenbeheer in C++ en zijn gedefinieerd in de C++ standaardbibliotheek.
De new Operator
De new operator alloceert een blok geheugen op de heap en retourneert een pointer naar de eerste byte. Bijvoorbeeld:
// declareer een int pointer int* pointVar; // dynamisch geheugen alloceren met new pointVar = new int; // wijs een waarde toe aan het toegewezen geheugen *pointVar = 45;
In dit snippet ontvangt pointVar het adres van een nieuw toegewezen int. Omdat new een pointer retourneert, moet de variabele van pointertype zijn. Voor arrays retourneert new een pointer naar het eerste element:
int* arr = new int[10]; // arr wijst naar het eerste element van een array van 10 ints
pointerVariable = new dataType; // enkel object pointerVariable = new dataType[size]; // array
De delete Operator
Wanneer een object of array toegewezen met new niet meer nodig is, moet delete worden aangeroepen om het geheugen vrij te geven aan het besturingssysteem. Het niet doen ervan resulteert in geheugenlekken die prestaties kunnen degraderen of de applicatie laten crashen.
Voor een enkel object:
delete pointerVariable;
Voor een array toegewezen met new[], gebruik de array-vorm:
delete[] pointerVariable;
Voorbeeld van een complete levenscyclus:
// alloceer een int int* pointVar = new int; *pointVar = 45; cout << *pointVar; // Output: 45 // deallokeer delete pointVar;
Tip: Koppel elke new aan een bijbehorende delete (of delete[] voor arrays). Gebruik RAII of slimme pointers (bijv. std::unique_ptr) om dit proces in productiecode te automatiseren.
Voorbeeld 1: Basis dynamische allocatie
#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; }
Output
45 45.45
Dit programma demonstreert allocatie van twee primitieve typen, toewijzing, output en schone deallocatie.
Let op: Dynamische allocatie kan flexibiliteit verbeteren, met name wanneer de grootte tijdens runtime bepaald wordt.
Voorbeeld 2: Een array van floats alloceren
#include <iostream> using namespace std; int main() { int num; cout << "Voer totaal aantal studenten in: "; cin >> num; float* ptr = new float[num]; cout << "Voer GPA van studenten in." << endl; for (int i = 0; i < num; ++i) { cout << "Student" << i + 1 << ": "; cin >> *(ptr + i); } cout << "\nGPA van studenten weergeven." << endl; for (int i = 0; i < num; ++i) { cout << "Student" << i + 1 << " :" << *(ptr + i) << endl; } delete[] ptr; return 0; }
Output
Voer totaal aantal studenten in: 4 Voer GPA van studenten in. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 GPA van studenten weergeven. Student1 :3.6 Student2 :3.1 Student3 :3.9 Student4 :2.9
Het programma vraagt de gebruiker om het aantal studenten, allokeert een float-array dienovereenkomstig, verzamelt invoer, toont de data en vrijmaakt tenslotte het geheugen met delete[].
Voorbeeld 3: Dynamische allocatie van een object
#include <iostream> using namespace std; class Student { int age; public: Student() : age(12) {} void getAge() { cout << "Leeftijd = " << age << endl; } }; int main() { Student* ptr = new Student(); ptr->getAge(); delete ptr; return 0; }
Output
Leeftijd = 12
Dit voorbeeld creëert een Student object op de heap. De constructor initialiseert age op 12, en de getAge methode print het. Na gebruik vrijgeeft delete het objectgeheugen.
C Taal
- GE Digital Lanceert Predictive Asset Management Software, Shift Van Reactief Naar Proactief Onderhoud
- Raspberry Pi 3 B+ – Bijgewerkte Functies, Specificaties & Aankoopgids
- Wittmann Battenfeld Onthult Nieuwe X‑Serie En Primus 14 Robots
- Fundamenten van digitaal geheugen: adressering, toegang en volatiliteit
- C++ Structuren vs Classes: Een praktische gids voor embedded-ontwikkelaars
- C++ variabelen, literalen en constanten: een uitgebreide gids
- C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
- C++ Overerving Beheersen: Public, Protected & Private Uitgelegd
- C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
- Dynamisch Geheugenbeheer in C: calloc, malloc en free uitgelegd
- Python-directory en bestandsbewerkingen beheersen