이 코드를 생각해 보자. 따라서이 메서드를 호출 할 때 복사가 필요하지 않습니다. 따라서 이동이 가능한 unique_ptr
으로 이러한 함수를 호출하면됩니다. 그러나 컴파일되지 않습니다이 코드 :C++ 없습니다
test.cpp:24:34: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’
std::unique_ptr<int> b = mov(a);
가 그래서 C++에서 unique_ptr
의 삭제 물론이다 생성자를 복사 호출을 시도하는 것 : 나는 오류가 발생합니다. 그런데 왜 여기에서 사본이 생깁니 까? 이 코드를 컴파일하려면 어떻게해야합니까?
'표준 : B = MOV unique_ptr (표준 : : 이동 (a)는) 그건,'* * 일이 잘못되고있는 것이 무엇인지에 대한 힌트를해야합니다. –
WhozCraig
@WhozCraig : 나는 특히 여기에 '이동'을 피하고자합니다. 그렇지 않으면, 나는 범용 참조가 아니라 rvalue 참조가 필요합니다. 보편적 인 리펙스 **의 요점은 ** 평범한 lvalue reference를 보유 할 수 있다는 것입니다. – gexicide
그럼 내가 마지막 경기를 보지 않을거야. 내 의견에 따라 움직이지 않고'mov' * 안에서 'a'라고 생각하는 것이 무엇입니까? 'T &&'는 [xvalue] (http://en.cppreference.com/w/cpp/language/value_category)로 승격되지 않았습니다. 그것은 움직여야 할 필요가있다. (또는 나는 그것을 처음 보지 않을 것이다.) – WhozCraig