Wskaźniki to "POD rodzaje" ... a.k.a. "Zwykłe stare dane". Zasady, kiedy i gdzie są domyślne zainicjowany są zestawione tutaj:
Default initialization of POD types in C++
tak nie ma. Nie ma znaczenia, jaki jest twój konstruktor dla klasy, jeśli jest to surowy wskaźnik jako członek klasy. W rzeczywistości nie tworzysz instancji klasy. Więc członkowie tacy jak Foo *
lub std::vector<Foo> *
lub cokolwiek kończącego się na * nie zostaną zainicjowani na nullptr.
Klasy inteligentnych wskaźników to nie POD. Więc jeśli używasz unique_ptr<Foo>
lub shared_ptr<Foo>
, który tworzy wystąpienia klas, które mają konstruktor, który je efektywnie null, jeśli nie zainicjujesz ich.
Czy to ma znaczenie, czy robię MyCLass * o = nowy MyCLass; lub robię MyCLass * o = new MyCLass(); w C++ 11?
Jedno pytanie na pytanie.
Do the parentheses after the type name make a difference with new?
Czy możesz wyjaśnić swoje pytanie? – juanchopanza
Najpierw nie potrzebujesz wyraźnego wskaźnika, wystarczy użyć 'std :: unique_ptr'. – 0x499602D2
@ 0x499602D2 Co sprawia, że myślisz, że ta klasa powinna być wyłącznym właścicielem wskazanego obiektu? –