Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

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

  1. GE Digital Lanceert Predictive Asset Management Software, Shift Van Reactief Naar Proactief Onderhoud
  2. Raspberry Pi 3 B+ – Bijgewerkte Functies, Specificaties & Aankoopgids
  3. Wittmann Battenfeld Onthult Nieuwe X‑Serie En Primus 14 Robots
  4. Fundamenten van digitaal geheugen: adressering, toegang en volatiliteit
  5. C++ Structuren vs Classes: Een praktische gids voor embedded-ontwikkelaars
  6. C++ variabelen, literalen en constanten: een uitgebreide gids
  7. C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
  8. C++ Overerving Beheersen: Public, Protected & Private Uitgelegd
  9. C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
  10. Dynamisch Geheugenbeheer in C: calloc, malloc en free uitgelegd
  11. Python-directory en bestandsbewerkingen beheersen