2013-03-17 13 views
6

Qual è la differenza tra le seguenti 2 inizializzazioni?Inizializzazione della classe C++ con e senza parentesi

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

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

Come ha detto JamesMcLaughlin, nessuna differenza, inoltre, non è limitata ai POD. – MFH

+0

@ DavidRodríguez-dribeas Come mai? –

+0

@JamesMcLaughlin: leggi la sezione 8.5 nello standard :) –

risposta

8

Nel primo caso l'oggetto viene lasciato inizializzato, mentre nel secondo caso l'oggetto è sempre garantito valore inizializzato, che in questo caso come tipo è POD significa zero inizializzata

+1

Anche se la differenza è essenzialmente inesistente nel caso di 'int', nel primo caso i membri sono inizializzati di default piuttosto che non inizializzati. –

+0

@JerryCoffin: Sì, avrei dovuto essere più chiaro, quella parte è anche dovuta al fatto che si tratta di un POD, per il quale * l'inizializzazione predefinita * indica che l'oggetto è * non inizializzato * –

+1

@ DavidRodríguez-dribeas: ... ma in C++ 11, non è limitato ai tipi POD (IIRC, dovrebbe applicarsi alla categoria un po 'più ampia di tutti i tipi banalmente copiabili). –

Problemi correlati