Zeiger sind "POD types" ... a.k.a. "Einfache alte Daten". Die Regeln dafür, wann und wo sie sind default-initialisiert werden hier zusammengefasst:
Default initialization of POD types in C++
So nicht. Es spielt keine Rolle, was Ihr Konstruktor für eine Klasse ist, wenn es ein roher Zeiger als Mitglied der Klasse ist. Sie instanziieren die Klasse nicht tatsächlich. Mitglieder wie Foo *
oder std::vector<Foo> *
oder alles, das auf * endet, wird nicht auf nullptr initialisiert.
Die Smart-Pointer-Klassen sind kein POD. Wenn Sie also eine unique_ptr<Foo>
oder eine shared_ptr<Foo>
verwenden, die Instanzen von Klassen erstellt, die einen Konstruktor haben, der sie effektiv null macht, wenn Sie sie nicht initialisieren.
Ist es wichtig, wenn ich MyCLass * o = neue MyCLass; oder ich mache MyCLass * o = new MyCLass(); in C++ 11?
Eine Frage pro Frage, bitte.
Do the parentheses after the type name make a difference with new?
Können Sie bitte Ihre Frage klären? – juanchopanza
Sie brauchen keinen expliziten Zeiger an erster Stelle, verwenden Sie einfach 'std :: unique_ptr'. – 0x499602D2
@ 0x499602D2 Was lässt Sie denken, dass diese Klasse der ausschließliche Besitzer des auf das Objekt gerichteten Objekts sein sollte? –