/*
Move Constructor( 이동 연산자 )
c++0x 에는 기존의 대입연산자에 이어서, 이동 연산자도 추가가 되었다.
*/
#include
class MoveClass
{
public:
// Default Constructor
MoveClass() {
std::cout << "Default Constructor Call" << std::endl;
}
// Copy Operator
void operator=(MoveClass& a) {
std::cout << "Copy Operator Call" << std::endl;
}
// Move Operator
void operator=(MoveClass&& a) {
std::cout << "Move Operator Call" << std::endl;
}
};
// 값이 복사되는 곳에서는 일반적으로 복사 생성자가 호출된다.
MoveClass foo(MoveClass& a)
{
MoveClass local;
return local; // 값이 복사 되는데, 우선순위가 존재한다.
// MoveClass(const MoveClass& a) 형태의 복사 생성자가 존재하고,
// MoveClass(MoveClass&& a) 형태의 이동 생성자가 존재하면
// 이동 생성자를 호출한다.
}
int main()
{
MoveClass a; // Default Constructor Call
MoveClass b;
a = b; // Copy operator Call
a = std::move(b); // move Operator Call
}