Ausgabe:
-Konstruktor: 1
Destruktor: 0
-Konstruktor: 1
Destruktor: 0
Destruktor: -1
aktueller Wert von k = -1
2
destruktor: -2
Destruktor: -3
Warum wurde der Destruktor zu oft aufgerufen, da er nur zweimal aufgerufen werden sollte, da der Konstruktor nur zweimal aufgerufen wird? Wie vermeide ich diese Situation?
Sie machen Kopien, aber Ihre Trace-Ausgabe zeigt das nicht an (und Ihr k
wird nicht erhöht, wenn es passiert). Also gehen die "extra" Destruktoraufrufe mit Kopierkonstruktionen.
Sie können eine der Kopien entfernen, indem Sie emplace
richtig verwenden:
aber Sie haben immer noch eine Kopie in push_back
selbst.
Schreiben Sie einen Kopierkonstruktor, damit Ihre Trace-Ausgabe diese Operationen berücksichtigt:
%Vor% (Ich würde mich nicht mit einem Move-Konstruktor herumärgern, als das wird delete
den Copy-Assignment-Operator und alles Hölle wird sich lösen .)
Beendeter Code:
%Vor%Ausgabe:
%Vor%Tags und Links c++ destructor