mercredi 25 février 2015

Why is the constructor/destructor called once? [duplicate]


This question already has an answer here:




Here is my source code:



#include <iostream>
#include <memory>
#include <vector>

using namespace std;

class Copy {
public:

Copy() {
cout << "Constructor called" << endl;
};

Copy(const Copy& copy) {
cout << "Copy constructor called" << endl;
}

Copy& operator=(Copy copy) {
cout << "Copy-Assign constructor called" << endl;
return *this;
}

Copy(Copy &&copy) noexcept {
cout << "Move constructor called" << endl;
}

Copy& operator=(Copy &&copy) noexcept {
cout << "Move-Assign constructor called" << endl;
return *this;
}

~Copy() {
cout << "Destructor called" << endl;
}
};

Copy TestCopy() {
Copy cop;
return cop;
}

vector<Copy> TestCopyVector() {
vector<Copy> copyVector = vector<Copy>{Copy()};
return copyVector;
}

int main()
{
Copy cop = TestCopy();
//TestCopy();
//vector<Copy> copyVector = TestCopyVector();

return 0;
}


In My understanding the line



Copy cop = TestCopy();


Should call Copy's move-assignment. While the output is like bellow:



$ ./test
Constructor called
Destructor called


Could you anybody help explain this? Thanks.


Aucun commentaire:

Enregistrer un commentaire