C ++ - Speicherverwaltung: neu und löschen

In diesem Tutorial lernen wir anhand von Beispielen, wie Sie den Speicher in C ++ mithilfe von Neu- und Löschvorgängen effektiv verwalten.

Mit C ++ können wir den Speicher einer Variablen oder eines Arrays zur Laufzeit zuweisen. Dies wird als dynamische Speicherzuordnung bezeichnet.

In anderen Programmiersprachen wie Java und Python verwaltet der Compiler automatisch die den Variablen zugewiesenen Speicher. Dies ist jedoch in C ++ nicht der Fall.

In C ++ müssen wir den dynamisch zugewiesenen Speicher manuell freigeben, nachdem wir die Variable nicht verwendet haben.

Mit den Operatoren newund können wir Speicher dynamisch zuweisen und dann freigeben delete.

C ++ neuer Operator

Der newOperator weist einer Variablen Speicher zu. Beispielsweise,

 // declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;

Hier haben wir intmithilfe des newOperators dynamisch Speicher für eine Variable zugewiesen .

Beachten Sie, dass wir den Zeiger pointVar verwendet haben, um den Speicher dynamisch zuzuweisen. Dies liegt daran, dass der newBediener die Adresse des Speicherorts zurückgibt.

Im Fall eines Arrays gibt der newOperator die Adresse des ersten Elements des Arrays zurück.

Aus dem obigen Beispiel können wir ersehen, dass die Syntax für die Verwendung des newOperators lautet

 pointerVariable = new dataType;

Operator löschen

Sobald wir keine Variable mehr verwenden müssen, die wir dynamisch deklariert haben, können wir den von der Variablen belegten Speicher freigeben.

Hierzu wird der deleteOperator verwendet. Es gibt den Speicher an das Betriebssystem zurück. Dies wird als Speicherfreigabe bezeichnet .

Die Syntax für diesen Operator lautet

 delete pointerVariable;

Betrachten Sie den Code:

 // declare an int pointer int* pointVar; // dynamically allocate memory // for an int variable pointVar = new int; // assign value to the variable memory *pointVar = 45; // print the value stored in memory cout << *pointVar; // Output: 45 // deallocate the memory delete pointVar;

Hier haben wir intmithilfe des Zeigers pointVar dynamisch Speicher für eine Variable zugewiesen.

Nach dem Drucken des Inhalts von pointVar haben wir den Speicher mithilfe von freigegeben delete.

Hinweis : Wenn das Programm eine große Menge unerwünschten Speichers verwendet new, kann das System abstürzen, da für das Betriebssystem kein Speicher verfügbar ist. In diesem Fall kann der deleteBediener dem System vor einem Absturz helfen.

Beispiel 1: Dynamische Speicherzuweisung in C ++

 #include using namespace std; int main() ( // declare an int pointer int* pointInt; // declare a float pointer float* pointFloat; // dynamically allocate memory pointInt = new int; pointFloat = new float; // assigning value to the memory *pointInt = 45; *pointFloat = 45.45f; cout << *pointInt << endl; cout << *pointFloat << endl; // deallocate the memory delete pointInt, pointFloat; return 0; )

Ausgabe

 45 45.45

In diesem Programm haben wir zwei Variablen intund floatTypen dynamisch Speicher zugewiesen . Nachdem wir ihnen Werte zugewiesen und gedruckt haben, geben wir die Speicher mithilfe des Codes frei

 delete pointInt, pointFloat;

Hinweis: Durch die dynamische Speicherzuweisung kann die Speicherverwaltung effizienter gestaltet werden.

Besonders für Arrays, bei denen wir die Größe des Arrays häufig erst zur Laufzeit kennen.

Beispiel 2: C ++ neuer und gelöschter Operator für Arrays

 // C++ Program to store GPA of n number of students and display it // where n is the number of students entered by the user #include #include using namespace std; int main() ( int num; cout <> num; float* ptr; // memory allocation of num number of floats ptr = new float(num); cout << "Enter GPA of students." << endl; for (int i = 0; i < num; ++i) ( cout << "Student" << i + 1 <> *(ptr + i); ) cout << "Displaying GPA of students." << endl; for (int i = 0; i < num; ++i) ( cout << "Student" << i + 1 << " :" << *(ptr + i) << endl; ) // ptr memory is released delete () ptr; return 0; )

Ausgabe

Geben Sie die Gesamtzahl der Schüler ein: 4 Geben Sie den GPA der Schüler ein. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Anzeigen der GPA von Studenten. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9

In diesem Programm haben wir den Benutzer gebeten, die Anzahl der Schüler einzugeben und in der Variablen num zu speichern.

Dann haben wir den Speicher dynamisch für das floatArray mit new zugewiesen .

Wir geben Daten in das Array ein (und drucken sie später aus), indem wir die Zeigernotation verwenden.

Nachdem wir das Array nicht mehr benötigen, geben wir den Array-Speicher mithilfe des Codes frei delete () ptr;.

Beachten Sie die Verwendung von ()after delete. Wir verwenden die eckigen Klammern (), um anzuzeigen, dass die Speicherfreigabe die eines Arrays ist.

Beispiel 3: C ++ neuer und gelöschter Operator für Objekte

 #include using namespace std; class Student ( int age; public: // constructor initializes age to 12 Student() : age(12) () void getAge() ( cout << "Age = " << age 

Output

 Age = 12

In this program, we have created a Student class that has a private variable age.

We have initialized age to 12 in the default constructor Student() and print its value with the function getAge().

In main(), we have created a Student object using the new operator and use the pointer ptr to point to its address.

The moment the object is created, the Student() constructor initializes age to 12.

We then call the getAge() function using the code:

 ptr->getAge();

Notice the arrow operator ->. This operator is used to access class members using pointers.

Interessante Beiträge...