Unreal Engine에서 Move Semantics

발행: (2026년 3월 7일 PM 04:18 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

복사 문제

전통적인 C++98 프로그래밍에서는 객체를 생성하는 두 가지 방법이 있었습니다: 처음부터 만들기와 복사하기.

Foo();                     // Default ctor
Foo(int x);                // Parameterized ctor
Foo(const Foo& rhs);       // Copy ctor
Foo& operator=(const Foo& rhs); // Copy assignment

복사는 보통 더 많은 프로세서 자원을 소모합니다. 이를 해결하기 위해 C++11에서는 이동 의미론(move semantics)을 도입했습니다.

Foo(Foo&& rhs);            // Move ctor
Foo& operator=(Foo&& rhs); // Move assignment

객체를 이동하는 것이 복사보다 메모리 효율적일 수 있습니다(항상 그런 것은 아닙니다).

특수 함수 구현 시점

맞춤형 이동 생성자를 구현할지 여부는 Rule of Three/Five/Zero에 달려 있습니다. 스스로에게 물어보세요: 당신의 타입이 소유권이나 동적 자원을 관리하고 있나요?

Plain Old Data 타입의 경우

POD 타입이나 멤버에 대해서는 이동이 본질적으로 복사와 동일합니다. 다음 타입들을 std::vector에 추가할 때의 차이를 살펴보세요:

// 재할당이 필요 없으며, 동적 메모리 포인터만 복사하면 됨
// sizeof(Foo) = 24 (gcc, Win64)
struct Foo {
    std::vector numbers; // 1000개의 요소를 가진 동적 벡터
};

// 전체 복사가 필요; 모든 데이터를 복제해야 함
// sizeof(Bar) = 4000 (gcc, Win64)
struct Bar {
    int numbers[1000];
};

언리얼 엔진 용어

언리얼 엔진은 자체 네이밍 규칙을 사용하며 표준 라이브러리와 동등한 스마트 포인터를 제공합니다:

  • TUniquePtr
  • TSharedPtr
  • TWeakPtr

Note:

  • UObject는 이동될 수 없으며 스마트 포인터로 참조될 수 없습니다; 항상 가비지 컬렉터에 의해 관리되고 원시 포인터로 참조됩니다.
  • r‑value‑reference 또는 스마트 포인터 매개변수를 가진 함수는 Blueprint에 노출될 수 없습니다.
  • UStruct는 사용자 정의 이동 기능을 정의할 수 있지만, 보통은 단순 데이터 구조이기 때문에 큰 이점을 얻지 못합니다.

Unreal Engine smart pointer illustration

0 조회
Back to Blog

관련 글

더 보기 »

Visualizer 구성 요소

Visualizer Components Visualizer components는 에디터 전용 컴포넌트로, 화면이나 HUD에 렌더링되지 않는 디버그 정보를 그립니다. 이들은 가볍고, …