Frage

Nach dem Lesen dieser Artikel auf Herb Sutter Blog, experimentierte ich ein wenig und lief in etwas, das mir ein Rätsel. Ich bin mit Visual C ++ 2005, aber ich wäre überrascht, wenn dies ist die Umsetzung abhängig.

Hier ist mein Code:

#include <iostream>

using namespace std;

struct Base {
    //Base() {}
    ~Base() { cout << "~Base()" << endl; }
};

int main()
{
    const Base & f = Base();
}

Wenn er ausgeführt wird, zeigt es "~Base()" zweimal ... Aber wenn ich den Konstruktor un-Kommentar, es zeigt es nur einmal

Hat jemand eine Erklärung dafür?

War es hilfreich?

Lösung

Dies ist die Umsetzung abhängig.

Der Standard erlaubt eine Kopie auftreten, wenn eine temporäre auf eine konstante Referenz verbindlich. In Ihrem Fall führt VC ++ eine Kopie nur, wenn der Konstruktor implizit definiert. Dies ist unerwartet, aber erlaubt.

C ++ 1x wird diese beheben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top