Faktoren:
new[]
muss mit delete[]
/ new()
mit delete
übereinstimmen
operator new(n)
ist eine Anforderung für Speicher für nicht spezifizierte Zwecke, während new unsigned char[n]
bedeutet lose Absicht, Zeichen dort zu speichern. Die Array-Form kann etwas schlechtere Leistung / Effizienz sein - genaue Details abhängig von Ihrer Implementierung:
5.3.4 / 12 new T [5] führt zu einem Aufruf von operator new, wobei x ein nicht-negativer, nicht näher spezifizierter Wert ist, der den Aufwand für die Array-Zuweisung darstellt: Das Ergebnis des neuen Ausdrucks wird um diesen Betrag vom Wert versetzt zurückgegeben von
operator new[]
....
BTW - keine sind initialisiert:
operator new()
gibt void*
auf nicht initialisierten Speicher zurück: siehe 3.7.4.1/2 "Es gibt keine Einschränkungen für den Inhalt des zugewiesenen Speichers bei der Rückgabe aus der Zuordnungsfunktion", während 5.3.4 / 15 "einen neuen Ausdruck" sagt Durch das Erstellen eines Objekts vom Typ T wird dieses Objekt wie folgt initialisiert: Wenn der New-Initialisierer ausgelassen wird, wird das Objekt standardmäßig initialisiert (8.5) "; 8.5 / 6 besagt, dass nur die Standardkonstruktoren der Klassentypen die Initialisierung bereitstellen. Der erste gibt einen Zeiger auf einen Speicherbereich zurück. Letzteres gibt einen Zeiger auf das erste Element eines Arrays mit einigen Objekten zurück. Wenn Sie Speicherplatz benötigen, verwenden Sie den Speicherplatz und nicht die Objekte.
Tags und Links c++ new-operator memory-management placement-new