Sprich ich habe:
%Vor%Ich füge eine Menge Zeug hinzu, benutze es und rufe dann einfach an:
%Vor% Musste ich foo.clear();
zuerst aufrufen? Oder ruft der delete
den Destruktor auf.
Bitte keine Kommentare bezüglich der Torheit von diesem, ich weiß, dass mindestens Auto-Zeiger hier verwendet werden sollten. Dieses Verhalten ist in der Codebasis, in der ich arbeite, und es ist außerhalb des Rahmens für mich, es zu beheben.
Ja, der Destruktor vector
wird aufgerufen, und sein Inhalt wird gelöscht.
delete
ruft den Destruktor auf, bevor die Zuweisung von Speicher aufgehoben wird, und der Destruktor von vector ruft implizit .clear()
auf (wie Sie wissen, wenn eine automatische Speicherdauer vector
außerhalb des Gültigkeitsbereichs liegt).
Dies ist ziemlich einfach zu testen, mit einem vector<T>
, wobei T
bei der Zerstörung in std::cout
schreibt (aber achtet auf Kopien innerhalb von vector
):
Entsprechend den Anforderungen von Containern (der C ++ - Standard, Tabelle 96 - Containeranforderungen)
(& amp; a) - & gt; ~ X () - Der Destruktor wird auf jedes Element eines angewendet; Der gesamte Speicher wird freigegeben.
Dabei steht X für eine Container-Klasse mit Objekten vom Typ T, a und b für Werte vom Typ X,
Tags und Links c++ vector destructor clear dynamic-allocation