In C ++ bezieht sich der Begriff „Dynamic Memory Deployment“ auf die manuelle Zuteilung des Speichers durch einen Programmierer. In Heap wird verteilter gemeinsamer Speicher bereitgestellt, während in Stack nicht statische und lokale Variablen Speicherressourcen erwerben.
Anwendungen
Wie verteilt C ++ Speicher und beauftragt den Speicher??
Die Methoden Malloc () und CALLOC () in C ++ werden verwendet, um den Speicher bei der Ausführung dynamisch zu ändern. Während die Free () -Methode verwendet wird, um den zugewiesenen Speicher freizusetzen. Diese Methoden werden von C ++ zusammen mit den beiden "neuen" und "löschenden" Bedienern bereitgestellt, die die Speicherzuweisung und die Freigabe einfacher und effizienter machen.
Die Korrelation zwischen dem Keyword "neu" und dem neuen "neuen" Betreiber neu
Diese beiden Dinge unterscheiden sich voneinander.
Es finden zwei Ereignisse statt: Speicherverteilung und Objektbildung. Beide werden durch das 'neue' Keyword behandelt. Anrufen des Betreibers und der Aufrufen des Konstruktors selbst sind die Verfahren zur Zuweisung von Speicher. Der Betreiber "neu" übernimmt keine Verantwortung für das Aufrufen des Konstruktors, aber Sie können die Speicherzuweisungsstrategie anpassen. Das neue Schlüsselwort hat diese Verantwortung. Das Aufrufen des Konstruktors, ohne den Bediener neu zu verwenden, ist machbar.
Neuer Betreiber
Die Nachfrage nach Speicherzuweisung im offenen Speicher wird vom neuen Bediener angezeigt. Wenn genügend Speicher zugänglich ist, verarbeitet ein neuer Bediener Daten. Initialisiert es dann und gibt dem Zeigerobjekt die Adresse des kürzlich zugewiesenen und konfigurierten Speichers an.
Beispiel 1
Wir führen diesen Code aus, um zu zeigen, wie die neuen und löschlichen Operatoren verwendet werden können. Der Speicher wird dynamisch zugewiesen und freigegeben.
#enthalten
Verwenden von Namespace STD;
int main ()
int* a = null;
a = neu (nichts) int;
Wenn (!A)
Cout << "Memory is not allocated\n";
anders
*a = 45;
Cout << "Value of a: " << *a << endl;
float *c = neuer float (67.84);
Cout << "Value of c: " << *c << endl;
int x = 6;
int *b = neu (Nothrow) int [x];
Wenn (!B)
Cout << "Memory is not allocated\n";
anders
für (int j = 0; j < x; j++)
B [j] = J+1;
Cout << "A chunk of memory containing values: ";
für (int j = 0; j < x; j++)
Cout << b[j] << " ";
a löschen;
C löschen;
löschen [] b;
Rückkehr 0;
Die erforderlichen Bibliotheken wären integriert. Als nächstes wird der Standard -Namespace als "std" hinzugefügt. Hier würde die main () -Funktion aufgerufen. Wir haben einen Zeiger initialisieren und diesen Zeiger auf "Null" setzen. Fordern wir das Speichern der Variablen an, die für einen "neuen" Betreiber verwendet werden. Der Datentyp 'A' wird "ganzzahlig" sein. Der Zustand "If-Else" würde gelten. Wenn die definierte Bedingung erfüllt ist, zeigt die Anweisung 'Cout' den Text „Speicher nicht zugeteilt“ an. Andernfalls würden wir den Wert des Zeigers speichern.
Anschließend zeigt der Befehl "Cout" den Wert des Zeigers. Jetzt würden wir einen Speicherblock anfordern, indem wir den "neuen" Operator verwenden. Wir geben den Gleitpunktwert der Variablen 'C' an, indem wir den "neuen" Operator verwenden. Jetzt druckt der 'Cout' den Wert der Variablen 'C'. Hier geben wir die Größe des Speicherblocks an. Wir deklarieren eine Variable 'x' und setzen ihren Datentyp als "Ganzzahl" fest. Wir erstellen einen neuen Zeiger namens 'B' und geben ihm den Wert an, indem wir den "neuen" Operator verwenden.
Noch einmal wird der Zustand "If-Else" verwendet. Innerhalb der Aussage "else" haben wir die "for" -Schürtung verwendet. Zunächst würde die Schleifenvariable 'J' deklariert und wir definieren den Zustand. Dann erhöhen wir den Wert der Schleifenvariablen um 1. Der Befehl "Cout" wird verwendet, um die Zeile "Ein Stück Speicher, der Werte enthält" zu drucken. Noch einmal werden wir die 'for' -Schleife beschäftigen.
Jetzt werden wir den zugewiesenen Speicher durch die Verwendung des "Löschen" -Operators befreien. Vor dem Hinzufügen des Befehls 'return 0' befreien wir den Block des zugewiesenen Speichers mit dem Array.
Wir erwerben diese Art von Ergebnis, nachdem wir das oben genannte Programm ausgeführt haben.
Beispiel 2
In diesem Fall werden wir den "neuen" Operator für verschiedene Objekte verwenden.
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()
int *l = null;
L = neuer int ();
int *v = new int (23);
Wenn(!l)
Cout<<"bad memory allocation"<
anders
Cout<<"memory allocated successfully"<*l = 20;
Cout<<"*l = "<<*l<Cout<<"*v = "<<*v<
double *arr = null;
arr = neues Double [20];
Wenn(!Arr)
Cout<<"memory not allocated"<anders
für (int k = 0; k<20;k++)
arr [k] = k+1;
Cout<<"arr values : ";
für (int k = 0; k<20;k++)
Cout<< arr[k]<<"\t";
l löschen;
vieren v;
[] arr;
Rückkehr 0;
In der Abbildung befindet sich die Integration der notwendigen Bibliotheken . Als nächstes wird der als „std“ bekannte Namespace hinzugefügt. Die main () -Methode würde aufgerufen. Um einen Zeiger zu initialisieren, würden wir ihn auf „NULL“ setzen."Der Wert der Variablen" I ", die für den" neuen "Operator verwendet wird, wird hier gespeichert. Der Datentyp dieser Variablen ist „Integer.”Der Zustand„ If-ELSE “wird verwendet. Wenn die angegebene Bedingung erfüllt ist, wird der Text „Schlechte Speicherzuweisung“ von der Anweisung „Cout“ angezeigt. Wenn nicht, würden wir den Wert des Zeigers behalten.
Anschließend wird der Text "Memory, die erfolgreich zugewiesen werden" mit dem Befehl "Cout" angezeigt werden. Der Wert des Zeigers würde festgelegt. Der Wert des Zeigers würde vom Befehl "Cout" angezeigt. Wir haben das Array mit dem Datentyp "Double" initialisiert und ihm den Wert "NULL" gegeben.Mit dem 'neuen' Operator definieren wir den Wert dieses Arrays. Es verwendet eine Anweisung "If-ELSE". Wenn der Zustand erfüllt ist, druckt der Befehl „Cout“ „Speicher nicht zugewiesen.”; Sonst haben wir verschachtelte "für" Aussagen verwendet.
Vor dem Definieren der Bedingung würde die Schleifenvariable „J“ zuerst angegeben. Als nächstes fügen wir 1 zum Wert von 'J' hinzu. Die Werte des Arrays würden mit dem Befehl "Cout" gedruckt. Wir würden die "für" -Schloops noch einmal verwenden. Jetzt werden wir den Löschbetreiber verwenden. Wir werden den Speicher veröffentlichen, der zugewiesen wurde. Wir geben den Block des zugewiesenen Speichers frei, indem wir das Array verwenden, bevor wir die Anweisung "Return 0" hinzufügen.
Nach der Implementierung des oben genannten Code erhalten wir das gewünschte Ergebnis.
Abschluss
Die Verwendung des "neuen" Betreibers steht im Mittelpunkt dieses Artikels. Für benutzerdefinierte Datentypen in Klassen und anderen Datentypen werden wir den „neuen“ Operator verwenden. Wir haben zwei Beispiele im Zusammenhang mit diesem Thema ausgeführt. Das erste Beispiel zeigt, wie C ++ "neuer" Operator verwendet wird. Die letzte Abbildung zeigt, wie der „neue“ Operator auf Objekte angewendet wird.