Dynamische Speicherzuweisung in C ++

Dynamische Speicherzuweisung in C ++

Die Speicherzuweisung wird zum Zeitpunkt der variablen Deklaration bestimmt. In den meisten Fällen wissen wir jedoch nicht, wie viel Speicher für eine bestimmte Variable erforderlich ist. In diesem Fall muss die Speicherzuweisung zur Laufzeit erfolgen. Die Laufzeitspeicherzuweisung des Programms wird als dynamische Speicherzuweisung bezeichnet. In der dynamischen Speicherzuweisung kennen wir die tatsächliche Größe der Variablen nicht. Wir weisen das Gedächtnis für diese Variable manuell zu und kann auch ein Array oder ein Objekt einer Klasse sein. Zeiger spielen eine Schlüsselrolle bei der dynamischen Speicherzuweisung. Wenn wir den Speicher dynamisch zuordnen, das “neuDas Schlüsselwort wird verwendet, um dem Compiler mitzuteilen, dass wir den Speicher dynamisch zuweisen. Wenn wir mit der Zuweisung des Gedächtnisses fertig sind, müssen wir am Ende manuell “löschen”Dieser reservierte dynamische Speicher. In anderen Programmiersprachen wie Python und Java müssen wir den Speicher nicht dynamisch zuweisen, da der Compiler das automatisch tut. Aber in C und C ++ tun wir dies manuell mit dem neu (Raum reservieren) und löschen (zum freien Speicherplatz) Schlüsselwörter.

Warum vergeben wir den Speicher dynamisch??

In C ++ erfolgt die dynamische Speicherzuweisung, wenn wir die tatsächliche Größe der Variablen oder Elemente, die wir in einer Variablen speichern möchten, nicht kennen. Die Gesamtwerte, die gespeichert werden müssen, werden zur Laufzeit entschieden. Heap zuweist den dynamischen Speicher, aber bei statischer Fall wird der Speicher in einem Stapel zugewiesen. Wenn wir also nicht die genaue Größe von Variablen kennen und es zur Laufzeit erfolgen muss, zuordnen Sie den Speicher dynamisch zu.

Syntax:

Reservespeicher
Pointer_variable = new Data_type;

Zuerst müssen wir den Speicher auf einem Haufen reservieren. Zu diesem Zweck definieren wir eine Zeigertypvariable, die der “entspricht“neuSchlüsselwort und dann die Art der Variablen definieren. Der "neuSchlüsselwort reserviert den Speicher im Haufen.

Wir können auch eine Array-Variable definieren.

Pointer_variable = new Data_type [Größe];

Um die Variable zu initialisieren, setzen wir den Wert nach dem Data_Type () wie folgt nur in die Klammung ein:

Pointer_variable = new Data_type (Wert);
Freier Speicher
pointer_variable löschen;

Wenn wir mit der dynamischen Speicherzuweisung fertig sind, bearbeiten Sie den Speicher, um die Daten vor Speicherleckage zu speichern. Der "löschenDas Schlüsselwort mit dem Namen der Zeigervariablen gibt den dynamischen Speicher frei.

Dynamische Speicherzuweisung von Variablen

Erklären wir den Allokations- und Deallokationsprozess des dynamischen Speichers einer Variablen vom Typ Ganzzahl.

Code:

#enthalten
Verwenden von Namespace STD;
int main ()
int* p_value = null;
p_value = new int;
*p_Value = 674;
Cout<< "Value of p_valueis : " << *p_value<p_Value löschen;
Rückkehr 0;

Starten Sie diesen Code, indem Sie die Header -Datei einbeziehen, um auf die Eingabe- und Ausgabemethoden der Bibliothek zuzugreifen. Diese Bibliothek verfügt über integrierte Methoden, auf die wir in unserem Programm zugreifen können. Rufen Sie nun die main () -Methode auf und definieren Sie eine Zeigervariable "*p_Value", um die Heap -Adresse zu halten, da die dynamische Speicherzuweisung auf dem Heap erfolgt. Die statische Zuweisung erfolgt im Stapel, da wir bereits wissen, dass die Datenmenge die Größe der Variablen bedeutet. Initialisieren Sie den Ganzzahlzeiger mit "Null".

Als Nächst. Durch die Verwendung des Begriffs „neu“ wird der Compiler angewiesen, den Heap -Speicher für die Variable des Ganzzahltyps zuzuweisen. Speichern Sie zusätzlich einen Wert von "674" im Zeigertyp "*p_Value" -Variable. Führen Sie dann den Befehl "cout" aus, um die Zeile "Wert der P_Value" und den Wert der Ganzzahl "*p_Value" -Variable zu drucken, die dynamisch im Haufen gespeichert ist. Um die Daten abzurufen, die im Heap gespeichert sind, verwenden wir den Zeiger. Der Zeiger speichert und greift auf die Daten auf dem Haufen auf. Es greifen nicht direkt auf die Daten zu. Verwenden Sie dann den Befehl "Löschen", um den Zeigertyp "p_Value" -Variable zu löschen, damit wir unsere Daten nicht verlieren oder keine andere Person auf unsere Daten zugreifen kann.

Ausgang:

Wert von p_Value ist: 674

Dynamische Speicherzuweisung eines Klassenobjekts

Lassen Sie uns eine Klasse definieren und das Gedächtnis in dieser Abbildung dynamisch seinen Objekten zuordnen.

Code:

#enthalten
Verwenden von Namespace STD;
Klassenprogramm_0
öffentlich:
Programm_0 ()
Cout<< "I am Constructor" <
~ Programm_0 ()
Cout<< "I am Destructor" <
;
int main ()
Programm_0* myarray = new programm_0 [3];
löschen [] myarray;
Rückkehr 0;

Integrieren Sie in diesem Code die Bibliothek, um die "Cout" -Methode zu verwenden. Verwenden Sie dann den Standard -Namespace. Definieren Sie eine "programm_0" -Klasse und setzen Sie diese Klasse als öffentlich fest. Die öffentlichen Klassenmethoden können außerhalb der Klasse zugegriffen werden. Die anderen Klassen können auch auf die Methoden dieser Klasse zugreifen. Definieren Sie den Konstruktor und den Destruktor in dieser Klasse. Wir initialisieren die Datenmitglieder der Klasse im Konstruktor. Der Destruktor zerstört die Objekte, sobald das Programm ausgeführt wurde. Es befreit das Gedächtnis, nachdem die Aufgabe erledigt ist. Beide werden durch den Klassennamen definiert.

Im Program_0 () -Konstruktor schreiben wir eine Codezeile, um eine Nachricht auf dem Terminal zu drucken. In ähnlicher Weise zeigen Sie im Destruktor ~ programm_0 () eine Nachricht an, indem Sie die Anweisung "Cout" ausführen. Immer wenn das Klassenobjekt erstellt wird, werden die Konstrukteure und Zerstörer aufgerufen. Wenn wir die bestimmte Klasse anrufen, führt sie den Konstruktor aus und führt dann andere Vorgänge aus, die wir ihm zuweisen. Nach Abschluss des Prozesses wird der Destruktor aufgerufen und zerstört alle Objekte, die erstellt werden, um auf die Klassenmethoden und Datenmitglieder zuzugreifen.

Führen Sie außerdem die main () -Funktion dieses Code aus. Jede Klasse wird aufgerufen und ihre Objekte werden in dieser Methode erstellt. Erstellen. Hier definieren wir die Größe von Array 3. Die Klasse wird dreimal aufgerufen und der Konstruktor wird auch dreimal ausgeführt. Nach all dem wird der Destruktor dreimal gerufen, um den Raum zu befreien. Der Destruktor löscht das Objekt, das die Klassen dreimal nennt.

Ausgang:

Ich bin Konstruktor
Ich bin Konstruktor
Ich bin Konstruktor
Ich bin Destructor
Ich bin Destructor
Ich bin Destructor

Abschluss

Dieses Dokument analysiert die dynamische Speicherzuweisung in C++. Wir beobachten auch, warum wir das Gedächtnis dynamisch zuordnen. Die dynamische Speicherzuweisung ist wichtig, wenn wir die tatsächliche Größe der zu speichernden Daten nicht kennen. In anderen Sprachen wie Python müssen Programmierer den Speicher nicht manuell zuweisen, da der Compiler ihn automatisch tut. Nachdem der Speicher, das Speichern der Daten dort gespeichert und einen Zugriff darauf gewährt wird, wird der Speicher verhandelt. Deallocation ist wichtig, denn wenn wir den Speicher nicht bearbeiten, besteht die Chance auf Speicherleckage. Die dynamische Speicherzuweisung einer Ganzzahlvariablen und eines Klassenobjekts wird in den Codes dieses Handbuchs erläutert.