Heim > Backend-Entwicklung > C++ > Initialisiert der „neue' Operator in C den Speicher immer auf Null?

Initialisiert der „neue' Operator in C den Speicher immer auf Null?

Barbara Streisand
Freigeben: 2024-12-10 22:27:26
Original
300 Leute haben es durchsucht

Does the `new` Operator in C   Always Initialize Memory to Zero?

Operator new initialisiert den Speicher auf Null

Trotz des allgemeinen Missverständnisses, dass der neue Operator den Speicher nicht mit Nullen initialisiert, kann er dies tatsächlich erreichen Aufgabe unter bestimmten Bedingungen.

In C gibt es zwei Hauptszenarien, in denen der neue Operator Null ausführt Initialisierung:

  1. Klammern Initialisierung:

    Wenn „new“ folgt, folgen Klammern und eine leere Initialisierungsliste, wie z. B. wsk = new unsigned int() ;, ruft es explizit den Standardkonstruktor des Typs auf. Für primitive Typen wie unsigned int initialisiert der Standardkonstruktor den Speicher auf Null.

  2. Array-Initialisierung in Klammern:

    Ähnlich wie im vorherigen Szenario, Durch die Verwendung von Klammern und einer leeren Initialisierungsliste innerhalb der Array-Deklaration, wie z. B. wsa = new unsigned int[5]();, wird jedes Element des initialisiert Array auf Null.

Im bereitgestellten Beispielcode zeigen die folgenden Zeilen die Nullinitialisierung:

wsk2 = new unsigned int(5);
Nach dem Login kopieren

Dies initialisiert wsk2 auf den Wert 5.

wsk2 = new unsigned int;
Nach dem Login kopieren

Dadurch wird wsk2 auf Null initialisiert, da es die Klammersyntax ohne Initialisierungsliste verwendet. Dieses Verhalten gilt sowohl für Skalare als auch für Arrays.

Im zweiten Teil des Beispiels bestätigt die Ausgabe die Nullinitialisierung:

wsk2: 0x928e008 5
wsk2: 0x928e008 0
Nach dem Login kopieren

Die erste Zeile zeigt, dass wsk2 auf die Adresse 0x928e008 zeigt und enthält den Wert 5. Nach dem Löschen von wsk2 und dem Erstellen eines neuen mit new unsigned int; zeigt die zweite Zeile, dass es nun auf dasselbe zeigt Adresse (0x928e008), enthält aber Null.

Das obige ist der detaillierte Inhalt vonInitialisiert der „neue' Operator in C den Speicher immer auf Null?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage