Konst Bezug auf temporäre
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?
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