Ich habe im Wesentlichen die gleiche Frage wie this post, aber als ich ging, um die Top-Antwort zu testen, habe ich nicht die erwarteten Ergebnisse erhalten.Aufrufender Konstruktor in C++
Ich habe die folgende Klasse:
class Test
{
public:
Test()
{
std::cout << "default constructor" << std::endl;
}
Test(const Test &other)
{
std::cout << "copy constructor" << std::endl;
}
Test& operator=(const Test &other)
{
std::cout << "assignment operator" << std::endl;
return *this;
}
~Test()
{
std::cout << "destructor" << std::endl;
}
};
nur sind die Konstrukteure zu verfolgen genannt. Ich habe dann den folgenden Code in der Haupt:
Test t1 = Test();
im verlinkten Beitrag auf die Antwort Basierend, würde ich vier Zeilen der Ausgabe erwarten: eine für Standard das temporäre Objekt, für das Kopieren der Konstruktion und zwei destructor Anrufe : eine für die Zerstörung der temporären und die andere für t1. Allerdings bekomme ich nur zwei Zeilen: "default constructor" und "destructor", vermutlich beide für t1 nach dem Beenden von main(). Könnte jemand im Detail erklären, was passiert? Kann jemand auch erklären, warum hier der Zuweisungsoperator verwendet wird? Sollte es nicht einen Lvalue erwarten (weil es einen Lvalue ref benötigt), während das temporäre Objekt ein Rvalue ist?
http://en.cppreference.com/w/cpp/language/copy_elision C++ nicht Konstrukteuren hat zu rufen, wenn es nicht wirklich notwendig ist. – xaxxon
Hunderte von Duplikaten. –
'g ++-fno-elide-constructors' –