Operator new initialisiert Speicher auf Null
In C wird der Operator new üblicherweise für die dynamische Speicherzuweisung verwendet. Es weist einen Speicherblock der angegebenen Größe zu und gibt einen Zeiger auf den zugewiesenen Speicher zurück. Es gibt jedoch ein weit verbreitetes Missverständnis, dass new den zugewiesenen Speicher nicht mit Nullen initialisiert. In diesem Artikel wird erläutert, wie new den Speicher initialisiert, und die offensichtlichen Diskrepanzen behoben.
Standard- und Nullinitialisierung
Bei Verwendung von new zum Erstellen eines Objekts eines primitiven Typs (z. B. int , unsigned int), gibt es zwei Varianten:
Gleiches gilt für Arrays:
Klarstellung der Nullinitialisierung
Während „new“ im Allgemeinen Grundelemente mit unbestimmten Werten initialisiert, tritt die Ausnahme auf, wenn die Nullinitialisierung mit der Syntax für leere Klammern verwendet wird (neu). Typ();). Dadurch wird der Speicher mit Nullen initialisiert. Der C 11-Standard unterstützt dieses Verhalten:
[C++11: 5.3.4/15]: A new-expression that creates an object of type T initializes that object as follows: [...] If the new-initializer is interpreted according to the initialization rules of 8.5 for direct-initialization.
Placement New
Placement New ermöglicht die Zuweisung von Speicher an einem bestimmten Ort. Bei Verwendung dieser Technik mit Nullinitialisierung wird deutlich, dass der Speicher tatsächlich auf Null gesetzt ist:
//... (memory allocation and initialization code) wsa[0] = 1; // Modify the memory location wsa[1] = 2; // Modify the memory location // ... (more modifications) //...
Wenn der Speicher die ursprünglichen Werte (1, 2, ...) enthalten hätte, wäre die Nullinitialisierung erfolgt fehlgeschlagen. Die Ausgabe bestätigt jedoch, dass der zugewiesene Speicher auf Null gesetzt wurde.
Während „new“ den primitiven Speicher normalerweise nicht mit Nullen initialisiert, wird der Speicher durch die Nullinitialisierung (new type();) auf Null initialisiert. Dies gilt sowohl für die direkte Speicherzuweisung als auch für die Neuplatzierung.
Das obige ist der detaillierte Inhalt vonInitialisiert „new' in C den Speicher auf Null?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!