2013-03-17 14 views
6

Jaka jest różnica między następującymi dwiema dwiema inicjacjami?Inicjalizacja klasy C++ z nawiasami i bez nawiasów

class Pod { 
public: 
    int a, b; 
}; 

Pod *p1 = new Pod; 
Pod *p2 = new Pod(); 
+0

Jak powiedział JamesMcLaughlin, nie ma różnicy, co więcej, nie ogranicza się do POD. – MFH

+0

@ DavidRodríguez-dribeas Jak to? –

+0

@JamesMcLaughlin: Przeczytaj sekcję 8.5 w standardzie :) –

Odpowiedz

8

W pierwszym przypadku celem jest pozostawiony niezainicjowanego, podczas gdy w drugim przypadku, gdy przedmiot jest gwarancją wartości inicjalizacji, który w tym przypadku, jak jest on typu POD oznacza to zerowej inicjowane

+1

Chociaż różnica jest zasadniczo nie istnieje w przypadku "int", w pierwszym przypadku członkowie są domyślnie inicjowani, a nie niezainicjowani. –

+0

@JerryCoffin: Tak, powinienem być bardziej przejrzysty, ta część wynika również z faktu, że jest to POD, dla którego * domyślna inicjalizacja * oznacza, że ​​obiekt jest * pozostawiony niezainicjowany * –

+1

@ DavidRodríguez-dribeas: ... ale w C++ 11, nie jest ograniczone do typów POD (IIRC, powinno to dotyczyć nieco szerszej kategorii wszystkich typów trywialnie kopiowalnych). –

Powiązane problemy