Dynamische Erstellung und Freigabe von Objekten
1 Grundlegende Syntax von Neu und Löschen
1) Im Prozess der Softwareentwicklung ist es häufig erforderlich, Speicherplatz dynamisch zuzuweisen und zu löschen, z wie in dynamisch verknüpften Listen Einfügen und Löschen von Knoten. In der Sprache C werden die Bibliotheksfunktionen malloc und free zum Zuweisen und Freigeben von Speicherplatz verwendet. C++ bietet einfachere und leistungsfähigere Operatoren „new“ und „delete“, um die Funktionen „malloc“ und „free“ zu ersetzen.
Hinweis: Neu und Löschen sind Operatoren, keine Funktionen, daher ist ihre Ausführung effizient.
2) Obwohl C++ weiterhin die malloc- und free-Funktionen beibehält, um mit der C-Sprache kompatibel zu sein, wird Benutzern empfohlen, die new- und delete-Operatoren anstelle der malloc- und free-Funktionen zu verwenden. Beispiele für den neuen Operator:
new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 new char[10]; //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址 new int[5][4]; //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址 float *p=new float (3.14159); //开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p
Sie können keinen Anfangswert angeben, wenn Sie Array-Speicherplatz mit new zuweisen. Wenn der Speicherplatz aufgrund von unzureichendem Speicher oder aus anderen Gründen nicht normal zugewiesen werden kann, gibt new einen Nullzeiger NULL zurück, und der Benutzer kann anhand des Zeigerwerts feststellen, ob die Speicherplatzzuweisung erfolgreich war.
Anwendungsbeispiele
2 Dynamische Erstellung und Freigabe von Klassenobjekten
Mit Klassennamen definierte Objekte sind während der statisch Während der Ausführung des Programms kann der vom Objekt belegte Speicherplatz zu keinem Zeitpunkt freigegeben werden. Aber manchmal möchten Menschen ein Objekt erstellen, wenn es benötigt wird, es zerstören, wenn es nicht mehr benötigt wird, und den von ihm belegten Speicherplatz für andere Daten freigeben. Dadurch wird die Speicherplatznutzung verbessert.
In C++ können Sie den Operator new verwenden, um ein Objekt dynamisch zu erstellen, und den Operator delete, um das Objekt abzubrechen.
Box *pt; // Definieren Sie einen Zeiger auf das Box-Klassenobjekt. Die Zeigervariable pt
pt=new Box; //Die Startadresse des neuen Objekts wird in pt gespeichert
Auf dieses neue Objekt kann über pt zugegriffen werden im Programm. Zum Beispiel
cout //Geben Sie das Höhenelement des Objekts aus.
coutvolume( ); des Objekts Funktion, Volumen berechnen und ausgeben
C++ ermöglicht auch die Initialisierung des neu erstellten Objekts bei der Ausführung von new. Zum Beispiel:
Box *pt=new Box(12,15,18);
Diese Schreibweise kombiniert die beiden oben genannten Anweisungen (Zeigervariablen definieren und neue Objekte mit new erstellen). eine Anweisung und geben Sie den Anfangswert an. Das ist raffinierter.
Die Höhe, Breite und Länge im neuen Objekt erhalten die Anfangswerte 12, 15 bzw. 18. Das Objekt kann entweder über den Objektnamen oder über den Zeiger aufgerufen werden.
Wenn beim Ausführen der neuen Operation nicht genügend Speicher vorhanden ist und der erforderliche Speicherplatz nicht geöffnet werden kann, veranlassen die meisten aktuellen C++-Kompilierungssysteme, dass new einen Zeigerwert von 0 zurückgibt. Solange Sie prüfen, ob der Rückgabewert 0 ist, können Sie feststellen, ob die Speicherzuweisung erfolgreich ist.
Der ANSI C++-Standard schlägt vor, dass bei einem Fehler während der Ausführung von new eine „Ausnahme“ „ausgelöst“ wird und der Benutzer basierend auf der Ausnahme eine entsprechende Verarbeitung durchführen kann. Der C++-Standard erlaubt jedoch weiterhin die Rückgabe eines Zeigerwerts von 0, wenn ein neuer Fehler auftritt. Derzeit behandeln verschiedene Kompilierungssysteme neue Fehler auf unterschiedliche Weise.
Wenn das von new erstellte Objekt nicht mehr benötigt wird, können Sie es mit dem Löschoperator freigeben. Zum Beispiel
delete pt; //Gib den Speicherplatz frei, auf den pt zeigt
Dies löscht das Objekt, auf das pt zeigt. Das Objekt kann danach vom Programm nicht mehr verwendet werden.
Wenn Sie eine Zeigervariable pt verwenden, um nacheinander auf verschiedene dynamische Objekte zu zeigen, sollten Sie auf den aktuellen Zeiger der Zeigervariablen achten, um zu vermeiden, dass das falsche Objekt gelöscht wird. Wenn der Löschoperator ausgeführt wird, wird der Destruktor automatisch aufgerufen, um die Bereinigungsarbeiten abzuschließen, bevor der Speicherplatz freigegeben wird.
3 Eingehende Analyse von new und malloc
Gemischte Tests, Vergleich von Ähnlichkeiten und Unterschieden
Schlussfolgerung: malloc ruft den Konstruktor von nicht auf Klasse
Free ruft den Destruktor der Klasse nicht auf
Das Obige ist die vierte Zusammenfassung der C++-Überprüfungspunkte und der Verwendung von New und delete For Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!