Jaka jest różnica między następującymi dwoma liniami?Jaka jest różnica między "int * a = new int" i "int * a = new int()"?
int *a = new int;
int *a = new int();
Jaka jest różnica między następującymi dwoma liniami?Jaka jest różnica między "int * a = new int" i "int * a = new int()"?
int *a = new int;
int *a = new int();
int *a = new int;
a
wskazuje domyślnego zainicjowany obiektu (która niezainicjowanego obiekt w to przypadku tj wartość jest nieokreślone według normy).
int *a = new int();
a
wskazuje wartości inicjalizacji przedmiotu (czyli zera zainicjowany obiektu w ten przypadku tj wartość jest zera według normy).
Pierwszy wariant domyślnych inicjuje dynamicznie przydzielane int
, który dla wbudowanych typów, takich jak int
nie wykonuje inicjalizację.
Drugi wariant wartość inicjuje to, co dla int
oznacza zerowej inicjalizacji, nadając mu wartość 0
.
C++ 11 § 8.5, p7, C++ 11 § 8.5, p5 i C++ 11 § 8.5, p6 dla inicjowania wartości, inicjalizacji zerowej i inicjowania domyślnego, odpowiednio, w przypadku PO jest zainteresowany (i bardzo w to wątpię). – WhozCraig
Należy zauważyć, że testowanie nie ujawnia tej różnicy: w przeciwieństwie do automatycznego przechowywania, pamięć przydzielana dynamicznie często kończy się jako zero w prostych programach testowych i zawiera tylko "śmieci" w większych programach, gdy wcześniejsza pamięć zostanie ponownie wykorzystana. – hvd