이동 생성자란?
이름 없는 임시 객체가 생기는 것을 막을 수 없다. 그러나 무의미한 임시 객체의 생성은 프로그램의 효율을 떨어뜨린다. 이러한 문제 때문에 생긴 것이 이동 생성자이다. 임시 객체는 어차피 사라지는 객체이다. 깊은 복사를 수행할 필요 없이 얕은 복사를 수행함으로써 성능을 높일 수 있다.
#include <iostream>
using namespace std;
class TestClass
{
public:
TestClass() { cout << "TestClass()" << endl; }
~TestClass() { cout << "~TestClass()" << endl; }
TestClass(const TestClass &ref)
: num(ref.num)
{
cout << "TestClass(const TestClass &ref)" << endl;
}
//이동 생성자
TestClass(const TestClass &&ref)
: num(ref.num)
{
cout << "TestClass(const TestClass &&ref)" << endl;
}
TestClass& operator=(const TestClass&) = default;
void SetNum(int param) { num = param; }
private:
int num = 0;
};
TestClass TestFunc(int param)
{
TestClass a;
a.SetNum(param);
return a;
}
int main()
{
TestClass b;
b = TestFunc(10);
return 0;
}
결과값:
TestClass()
TestClass()
TestClass(const TestClass &&ref)
~TestClass()
~TestClass()
~TestClass()
b = TestFunc(10); 코드를 통해 이동 생성자가 호출된다. 만약 이동 생성자를 정의하지 않았다면 복사 생성자가 생성되어 깊은 복사를 수행할 것이다.
'C++' 카테고리의 다른 글
[C++] operator 복합 대입 연산자와 이동 대입 연산자 (0) | 2019.12.22 |
---|---|
[C++] 연산자 함수와 operator (0) | 2019.12.21 |
[C++] operator 대입연산자 (0) | 2019.12.19 |
[C++] 변환 생성자의 묵시적 변환과 임시 객체 explicit (0) | 2019.12.18 |
[C++] 복사 생성자(copy constructor) (0) | 2019.12.17 |