Gibt es unter C ++ 11, wenn "Test" eine gewöhnliche Klasse ist, einen Unterschied zwischen:
Test* test = new Test;
//and
Test* test = new Test();
Hinweis: Dies ist die gleiche Frage Machen die Klammern hinter dem Typnamen einen Unterschied zu neuen? nochmal gefragt, weil der alte Thread vor C ++ 11 steht, während ich gerne fragen würde ob da ein Unterschied unter C ++ 11 Standard ist.
Die akzeptierte Antwort dieser Frage lautet:
- In C ++ 1998 gibt es 2 Arten der Initialisierung: Null und Standard In
- C ++ 2003 ein 3. Typ der Initialisierung, Wert Initialisierung wurde hinzugefügt.
Ich verstehe, dass C ++ 11 nur 2 Initialisierung, Standard und Wert hat. Also ich denke, die Antwort ist ein bisschen anders?
Antworten:
1 für die Antwort № 1C ++ 11 hat Null-Initialisierung, Standard-Initialisierung, Wert-Initialisierung (8.5 / 5, / 6 und / 7, entsprechend), Kopier-Initialisierung (8.5 / 14), Direkt-Initialisierung (8.5 / 15) und Listeninitialisierung (8.5.4).
In Gedenken an new
bestimmtes:
5.3.4 / 15 EIN neuer Ausdruck das erstellt ein Objekt vom Typ
T
initialisiert das Objekt wie folgt:- Wenn die Neuinitialisierer entfällt, das Objekt ist default-initialisiert (8.5); Wenn keine Initialisierung durchgeführt wird, hat das Objekt einen unbestimmten Wert.
- Ansonsten der Neuinitialisierer wird gemäß den Initialisierungsregeln von 8.5 für die direkte Initialisierung interpretiert.