Mam kawałek koduPrzenieść konstruktora na zniszczony obiekt?
#include <iostream>
class A {
public:
A() {
std::cout << "Default constructor" << std::endl;
}
A(const A & other)
{
std::cout << "Copy constructor" << std::endl;
}
A(A && other)
{
std::cout << "Move constructor" << std::endl;
}
~A()
{
std::cout << "Destructor" << std::endl;
}
private:
int i;
};
A && f()
{
return A();
}
int main() {
A a = f();
}
Próbowałem uruchomić go i wyjście okazuje się
Default constructor
Destructor
Move constructor
Destructor
Moje pytanie jest Dlaczego destruktor jest wywoływana przed przeniósł konstruktora? Czy to też oznacza, że drugi obiekt został skonstruowany ze zniszczoną wartością?
Nie powinieneś zwracać (rvalue-) odniesienia zmiennej tymczasowej. – Jarod42
@ FrançoisAndrieux powinno to być odpowiedzią – Slava
Zarówno GCC, jak i VC powinny domyślnie generować ostrzeżenie kompilatora. W każdym przypadku oba * mogą * ostrzec cię, jeśli ustawisz odpowiedni poziom ostrzeżenia. –