Jetzt versucht es mit dem Array mit Strings von 100 Bytes je Füllung, und sehen, ob es noch alle befreit die zugewiesenen Speicher ...
Es ist nicht definiertes Verhalten, und wie immer, manchmal UB erscheint arbeiten. In Ihrem Fall haben Sie keinen Destruktor für die Objekte im Speicher, so dass es keine "weitere Arbeit" gibt, sondern nur den gesamten Speicher [1]. Aber wenn Sie ein Objekt haben, das einen Destruktor hat, der etwas Nützliches tut, wird es (wahrscheinlich) nicht aufgerufen.
Sie sollten IMMER delete []
verwenden, wenn Sie new T[size];
verwenden, um zuzuweisen. Mischen Sie nicht die beiden, es ist immer falsch - nur manchmal passiert es zu arbeiten [genau wie einige Größen von Schlüsseln in Zoll funktioniert auf mm Muttern und umgekehrt - aber es ist immer noch falsch, einen Zoll Schraubenschlüssel auf metrischen Muttern verwenden].
[1] Beachten Sie, dass dies für diese bestimmte Compiler/C++ - Bibliothek Kombination funktionieren kann. Das Kompilieren mit einem anderen Compiler, das Verwenden einer anderen C++ - Bibliothek oder das Kompilieren für ein anderes Betriebssystem kann zum Absturz führen, wenn Sie dasselbe versuchen.
AFAIK das ist UB. – Borgleader
"Warum funktioniert das?" - Es scheint nicht, es scheint nur zu funktionieren. –
Ohne die Klammern rufen Sie nur einen Destruktor auf, nicht alle Destruktoren im Array. Siehe auch http://StackOverflow.com/Questions/2425728/Delete-VS-Delete-Operators-in-C – GreatBigBore