Warum wird der Destruktor einer C ++ Klasse beim Aufbau aufgerufen?

8

Ich habe das Problem, dass mein Klassen-Destruktor aufgerufen wird, wenn die Klasse erstellt wird. Betrachten Sie das folgende Testprogramm:

%Vor%

Die Ausgabe (vor der Schleife) ist

%Vor%

Ich verstehe das Verhalten des obigen Snippets nicht:

  1. Warum wird nur ein einzelnes Element konstruiert?
  2. Warum werden die Destruktoren aufgerufen?
janoliver 17.03.2014, 11:16
quelle

1 Antwort

10

Der Prototyp von std::vector::resize() ist:

%Vor%

Er erstellt also einen temporären Standardwert, der in den Vektor eingefügt werden soll (Ihr Konstruktoraufruf), dann wird er 10-mal in den Vektor kopiert (Sie protokollieren diese nicht), und dann wird das Temporäre zerstört (Ihr Destruktor) Ruf).

Beachten Sie, dass sich die Dinge für C ++ 11 geändert haben. Jetzt gibt es zwei Überladungen:

%Vor%

Wenn Sie also einen geeigneten C ++ 11-Compiler verwenden, rufen Sie die erste Überladung auf, und Ihre Werte werden value-initialisiert, dh sie verwenden den Standardkonstruktor.

    
rodrigo 17.03.2014, 11:20
quelle