Löscht ein dynamisch zugewiesener Vektor seinen Inhalt

8

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.

    
Jonathan Mee 11.06.2015, 15:10
quelle

2 Antworten

9

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 ):

%Vor%

( Live-Demo )

    
Lightness Races in Orbit 11.06.2015, 15:11
quelle
3

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,

    
Vlad from Moscow 11.06.2015 15:18
quelle