2012-12-10 2 views
6

boost::unordered_map에 값 유형이어야하는 특정 유형의 이동 생성자 (복사 생성자 없음)를 구현하려고합니다. 이 유형을 Composite이라고 부릅니다.생성자 및 초기화 목록 이동

struct Base 
{ 
    Base(..stuff, no default ctor) : initialization list {} 
    Base(Base&& other) : initialization list {} 
} 

struct Composite 
{ 
    Base member; 
    Composite(..stuff, no default ctor) : member(...) {} 
    Composite(Composite&& other) : member(other.member) {} // <---- I want to make sure this invokes the move ctor of Base 
} 

내가이 그렇게 boost::unordered_map< Key , Composite >는 복사 생성자가 필요하지 않습니다 쓰고 싶어, 그냥 이동 생성자를 사용

Composite 다음과 같은 서명이 있습니다. 가능한 경우 move 생성자의 초기화 목록에의 복사본 생성자를 Composite으로 사용하고 싶지 않습니다.

이것이 가능합니까?

답변

11

세이 member(std::move(other.member)). 당신이를 rvalue 참조로 뭔가를 취할 때마다 황금 원칙적으로

는, 당신은 std::move 내부를 사용할 필요가, 당신은 보편적 참조 ( &&로 즉 추론 템플릿 형)에 의해 뭔가를 취할 때마다, 당신은 std::forward 내부를 사용해야합니다.

+1

비교적 새로운 용어 * 범용 참조 *를 잘 사용하려면 +1하십시오. – mavam

+1

@MatthiasVallentin : 그 용어는 Scott Meyers가 그 자리에서 고안 한 것입니다. 표준위원회는 요즘 "전달 참조"라는 용어를 선호합니다. –

+0

우리는 거의 2 년 후, 지역 사회가 안정된 기간에 수렴했음을 알게되어 기쁩니다. – mavam

관련 문제