Was ist der Unterschied zwischen zwei Zeilen?Was ist der Unterschied zwischen "int * a = new int" und "int * a = new int()"?
int *a = new int;
int *a = new int();
Was ist der Unterschied zwischen zwei Zeilen?Was ist der Unterschied zwischen "int * a = new int" und "int * a = new int()"?
int *a = new int;
int *a = new int();
int *a = new int;
a
zeigt auf default-initialisiert Objekt (das uninitialized Objekt in dies Fall heißt der Wert ist unbestimmt gemäß dem Standard).
int *a = new int();
a
zeigt auf Wert initialisierten Objekt (das in dieses Fall Objekt Null initialisiert ist, d.h der Wert Null gemäß der Norm ist).
der ersten Variante default-Initialisiert die zugeordnete dynamisch int
, das für integrierte Typen wie int
keine Initialisierung durchführt.
Die zweite Variante es Wert initialisiert, der für int
bedeutet Null-Initialisierung es 0
Wert ergibt.
C++ 11 § 8.5, p7, C++ 11 § 8.5, p5 und C++ 11 § 8.5, p6 für Wertinitialisierung, Nullinitialisierung bzw. Standardinitialisierung, falls das OP ist interessiert (und ich bezweifle es sehr). – WhozCraig
Beachten Sie, dass Tests diesen Unterschied nicht aufdecken können: Anders als bei der automatischen Speicherung endet der dynamisch zugewiesene Speicher in einfachen Testprogrammen oft bei Null und enthält nur "Müll" in größeren Programmen, wenn früherer Speicher wiederverwendet wird. – hvd