(C++ : Move Semantics-3) std::move

Posted by : at

Category : Cpp


class Test
{
public:
  Test() {}
  ~Test() {}
  Test(const Test& t) { cout << "Copy" << endl; }
  Test(Test&& t) { cout << "Copy" << endl; }
};

int main()
{
  Test t1;
  Test t2 = t1;       // Copy
  Test t3 = Test();   // Move
  Test t4 = t1;       // Copy -> 그러런데 t1을 더 이상사용하지 않을 거라면?
  Test t4 = static_cast<Test&&>(t1);    // Move, 생성자 호출됨.
  Test t5 = move(t2);   // Move, 위와 동일한 동작
}
class Test
{
public:
  Test() {}
  ~Test() {}
  Test(const Test& t) { cout << "Copy" << endl; }
  Test(Test&& t) { cout << "Copy" << endl; }
};

int main()
{
  Test t1;
  Test t2 = t1;   // 초기화, 복사 생성자 호출
  t2 = t1;        // 대입, 대입연산자 호출
  
  t2 = move(t1);   // 대입에도 move가 가능?
}
Test& operator=(const Test& t) { return *this; }  // 복사 대입연산자
Test& operator=(Test&& t) { return *this; }  // move 대입연산자

// 우선은 복사 대입연산자 뿐만 아니라 move 대입연산자도 만들어야함을 기억하자.

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links