I\'m confused about when a move constructor gets called vs a copy constructor. I\'ve read the following sources:
Move constructor is not getting called in C++0x
A move constructor is called:
std::move(something)std::forward(something) and T is not an lvalue reference type (useful in template programming for "perfect forwarding")This is not a complete list. Note that an "object initializer" can be a function argument, if the parameter has a class type (not reference).
a RetByValue() {
a obj;
return obj; // Might call move ctor, or no ctor.
}
void TakeByValue(a);
int main() {
a a1;
a a2 = a1; // copy ctor
a a3 = std::move(a1); // move ctor
TakeByValue(std::move(a2)); // Might call move ctor, or no ctor.
a a4 = RetByValue(); // Might call move ctor, or no ctor.
a1 = RetByValue(); // Calls move assignment, a::operator=(a&&)
}