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 new
und können wir Speicher dynamisch zuweisen und dann freigeben delete
.
C ++ neuer Operator
Der new
Operator 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 int
mithilfe des new
Operators 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 new
Bediener die Adresse des Speicherorts zurückgibt.
Im Fall eines Arrays gibt der new
Operator 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 new
Operators 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 delete
Operator 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 int
mithilfe 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 delete
Bediener 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 int
und float
Typen 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 float
Array 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.