2011-03-06 7 views
16

Powiel możliwe:
Do the parentheses after the type name make a difference with new?Nie stosując nawiasy w wywołaniu konstruktora z nowego (C++)

Więc miałem w moim głównym:

Class* pC = new Class; 

To działa jak

Class* pC = new Class(); 

Uświadomiłem sobie, że właśnie dzisiaj pominąłem nawiasy (tak, że w pewnym sensie uderzyło mnie "przeciwieństwo" najbardziej irytującej parszy).

Moje pytanie: czy te dwie formy są równoważne?

+0

Obie wywołania wywołują domyślny konstruktor. –

Odpowiedz

40

Jeśli klasa ma zdefiniowany domyślny konstruktor, to oba są równoważne; obiekt zostanie utworzony przez wywołanie tego konstruktora.

Jeśli klasa ma domyślny domyślny konstruktor, istnieje różnica. Pierwszy z nich pozostawi dowolnych członków typu POD niezainicjowanych; drugi będzie wartościował - zainicjuj je (tj. ustaw je na zero).

+7

+1, nie wiedziałem o tej różnicy. –