2013-04-16 2 views
2

weak_ptr에 대한 부스트의 1.53 헤더를 살펴보면, 나는 이동 할당과 이동 생성자가 문서화되지 않았음에도 불구하고 구현되었다는 사실에 놀랐다. 이 documentation에서 이동 기능을 제공하기위한 std :: weak_ptr에 대한 요구 사항은 없습니다.std :: weak_ptr에 이동 생성자 또는 이동 할당 연산자가없는 이유는 무엇입니까?

Visual Studio 2012의 weak_ptr 구현을 살펴보면 weak_ptr에서 명시된 이동 작업을 알 수 없지만 weak_ptr은 상속 뒤에 숨겨져있을 수 있습니다. 그러나, weak_ptr를 활성화으로 이동되지 않고 있는게 틀림 없어 하나의 공유 참조 및 포인터 두 약한 참조,보고 시계 창에서이 코드 결과 :

std::shared_ptr<int> ptr(std::make_shared<int>(5)); 
std::weak_ptr<int> weakptr(ptr); 
std::weak_ptr<int> movedWeakPtr(std::move(weakptr)); 

은 표준이 좋은 이유가 있나요 :: weak_ptr은 이동 기능을 제공하지 않습니까? 그렇지 않다면 weak_ptr을 이동 가능한 유형으로 처리해야합니까?

답변

5

복사 가능한 모든 유형은 이며 정의에 따라입니다. weak_ptr은 복사 가능하므로 이동 가능합니다.

에는 이동 생성자가 있습니다. 그러나 이것은 상대적으로 작은 최적화를위한 것일뿐입니다. 아마도 표준위원회의 감독이었을 것입니다.

+2

C++에서 14 weak_ptr *은 이동 생성자를가집니다 § 20.8.2.3.1 [util.smartptr.weak] –

관련 문제