게임 개발 메모장
[ C++ ] 이동 생성자와 이동 시맨틱(Move semantics) 본문
이동 생성자란?
이름 없는 임시 객체가 생기는 것을 막을 수 없다. 그러나 무의미한 임시 객체의 생성은 프로그램의 효율을 떨어뜨린다. 이러한 문제 때문에 생긴 것이 이동 생성자이다. 임시 객체는 어차피 사라지는 객체이다. 깊은 복사를 수행할 필요 없이 얕은 복사를 수행함으로써 성능을 높일 수 있다.
#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++ ] 변환 생성자의 묵시적 변환과 임시 객체 explicit (0) | 2024.01.07 |
---|---|
[ C++ ] 멀티스레드 프로그래밍 (0) | 2024.01.06 |
[ C++ ] 복사 생성자(copy constructor) (0) | 2024.01.06 |
[ C++ ] static 변수와 함수 (0) | 2024.01.05 |
[ C++ ] RTTI ( dynamic_cast ) (0) | 2024.01.05 |