2014-10-29 4 views
1

임시 DerivedBase&&을 사용하는 메서드에 전달되면 그로부터 Base를 구성 할 수 있습니까?r 값 참조에서 임시의 하위 오브젝트로 이동할 수 있습니까?

+1

'이동'효과가 '베이스'유형에 미치는 영향에 따라 다릅니다. 'Derived' 객체를 유효한 상태로두면 yes입니다. 그렇지 않으면 아니오. –

+0

하위 개체를 비우는 것은 나에게는 모호한 것 같습니다. 비어있는 하위 객체가있는 (표현식 평가의 끝에서) 둘러싸는 객체 파괴가 정상적으로 진행됩니까? – haelix

+0

유형에 대해 작성한 이동 작성 코드가 올바른 상태로 남겨두면 예. 그렇지 않으면 아니오. –

답변

1

임시 수명 시간은 함수가 끝날 때까지 (또는 매개 변수의 수명이 다) 연장되므로 해당 참조에서 Base 개체를 생성 할 수 있습니다.

Base b = std::move(param); 

에 지정된 어떤 상태 당신이 남아 이동할 임시 객체 이동-에서 해당 유형의 객체 : 당신이 추가 std::move 필요

주 복사본 그것을 이동하지를 확인합니다. vector<int> 또는 string과 같은 표준 라이브러리 유형은 소위 "유효하지만 지정되지 않은 상태"를 가지고 있습니다. 기본적으로 사용자가 할 수있는 유일한 현명한 조작은 할당 (즉, 복사 또는 이동) 또는 파괴입니다. Base '이동 생성자 정의에 대한 정보가 없으면 추가 가정을 할 수 없습니다.

+0

좋아요,하지만 평생에 관한 것이 아니라 전체 물체가 남아있는 상태에 대해 걱정하고 있습니다. – haelix

+0

@haelix 답변을 확장했습니다. 나는 아직도 당신이 근본적으로 무엇을 요구하고 있는지 확실히 모르고있다 - 무엇이 "ok"가 될 것인가? – Columbo

+0

개체에서 할당해도 여전히 작동해야합니다. – Deduplicator