2016-07-21 9 views
3

In C++ Primer 5. (Kapitel 12),Sind dynamisch allokierte Objekte standardmäßig initialisiert?

standardmäßig dynamisch zugewiesenen Objekte Standard initialisiert sind, was bedeutet, daß Objekte von eingebauten oder Mischungstyp Wert undefiniert;

int *pi = new int; // unitialized int 

Diese Aussage zeigt, dass eingebauter Typ Objekt Wert nicht definiert, wenn Standard initialisiert. Das Verhalten des standardmäßigen initialisierten integrierten Objekttyps hängt jedoch davon ab, wo es definiert ist.

Um genau zu sein, muss eingebautes Objekt außerhalb jeder Funktion 0 sein, während das eingebaute Objekt innerhalb eines Blocks einen undefinierten Wert hat.

Daher denke ich, dass die obige Aussage ist nicht korrekt, da für Einbautyp:

Standard initialisiert = undefinierten Wert

Muss ich dies richtig zu verstehen?

+0

Globale VARs und lokale VARs befinden sich nicht im selben Speicher auf dem Gerät, auf dem der Code ausgeführt wird. Lokale dynamisch zugewiesene Variablen befinden sich auf dem Heap, und globale Variablen haben einen getrennten Heap. Aus diesem Grund scheinen sie mit Null initialisiert zu sein, und Locals sind es nicht. Aber das ist nur mit ein wenig Wissen zu erraten. –

Antwort

8

Bei Nicht-Klassentypen führt die Standardinitialisierung keine Initialisierung durch.

Variablen mit statischer oder Thread-Speicherdauer werden jedoch immer initialisiert, bevor eine andere Initialisierung stattfindet. Wenn Sie also int x; im globalen Gültigkeitsbereich haben, obwohl die Standardinitialisierung nichts tut, wird x immer noch auf Null initialisiert, aufgrund der Nullinitialisierung, die vor der Standardinitialisierung stattfindet.

Bei einem Nicht-Klassenobjekt mit dynamischer Speicherdauer ist der Wert unbestimmt, wenn kein Initialisierer angegeben ist, da die Nullinitialisierung nicht gilt.

Verwandte Themen