I puntatori sono "tipi POD" ... a.k.a. "Plain Old Data". Le regole per quando e dove sono default-inizializzati sono riassunte qui:
Default initialization of POD types in C++
Quindi no. Non importa quale sia il tuo costruttore per una classe, se è un puntatore raw come membro della classe. In realtà non stai creando un'istanza per la classe. Quindi membri come Foo *
o std::vector<Foo> *
o qualsiasi cosa che termina con * non saranno inizializzati su nullptr.
Le classi di puntatore intelligente non sono POD. Pertanto, se si utilizza un unique_ptr<Foo>
o un shared_ptr<Foo>
che crea istanze di classi, questo ha un costruttore che li rende effettivamente nulli se non li si inizializza.
Ha importanza se eseguo MyCLass * o = new MyCLass; oppure I MyCLass * o = new MyCLass(); in C++ 11?
Una domanda per domanda, per favore.
Do the parentheses after the type name make a difference with new?
Potete chiarire la domanda? – juanchopanza
In primo luogo non è necessario un puntatore esplicito, basta usare 'std :: unique_ptr'. – 0x499602D2
@ 0x499602D2 Cosa ti fa pensare che questa classe debba essere il proprietario esclusivo dell'oggetto puntato? –