std::movable

std::movable (이동 가능 객체 개념)

T가 이동될 수 있는(즉 이동 생성, 이동 대입이 가능하고 T 타입의 lvalue를 서로 swap할 수 있는) 객체 타입인지를 명세하는 개념(concept)이에요. C++20부터 있어요.

출처: cppreference

본문

<concepts> 헤더에 정의돼 있어요.

template< class T >
concept movable =
    std::is_object_v<T> &&
    std::move_constructible<T> &&
    std::assignable_from<T&, T> &&
    std::swappable<T>;

개념 movable<T>T가 이동될 수 있는 객체 타입임을 명세해요. 즉 이동 생성, 이동 대입이 가능하고 T 타입의 lvalue를 서로 swap할 수 있어야 해요.

구체적으로 T가 객체 타입이고(is_object), 이동 구성 가능하며(move_constructible), rvalue로부터 대입 가능하고(assignable_from<T&, T>), swap 가능해야(swappable<T>) 해요.

movable은 객체 개념(object concepts) 계층에서 copyable보다 한 단계 아래에 위치해요. copyablemovable을 포함하면서 복사까지 요구하므로, 이동만 가능한 타입(예: std::unique_ptr)은 movable은 만족하지만 copyable은 아니에요. 이동 전용 자원 소유 타입을 제약하는 제네릭 코드에서 핵심으로 쓰여요.

참고 문헌

  • C++23 표준 (ISO/IEC 14882:2024): 18.6 Object concepts [concepts.object]
  • C++20 표준 (ISO/IEC 14882:2020): 18.6 Object concepts [concepts.object]

더 알아보기 (Learn more)

cppreference