이사 후 unique_ptr
보관 이 보장 nullptr
되나요?
std::unique_ptr<int> p1{new int{23}};
std::unique_ptr<int> p2{std::move(p1)};
assert(!p1); // is this always true?
이사 후 unique_ptr
보관 이 보장 nullptr
되나요?
std::unique_ptr<int> p1{new int{23}};
std::unique_ptr<int> p2{std::move(p1)};
assert(!p1); // is this always true?
unique_ptr
std::unique_ptr::operator:
및에 대한 참조를 참조하십시오 std::unique_ptr::release
.
답변:
예, nullptr
이후 move
와 비교할 수 있으며 동등하게 비교할 수 있습니다.
§20.8.1 / 4 [unique.ptr] 부터
또한
u
요청시 소유권을 다른 고유 포인터로 전송할 수 있습니다u2
. 그러한 전송이 완료되면, 다음 사후 보류 :
-u2.p
이전 전송과 동일한u.p
,
-u.p
와 동일nullptr
하고,
...
(멤버 p
는 앞에서 설명한 것처럼 — 고유 포인터는 u
두 번째 개체에 대한 포인터를 저장하는 개체입니다.p
)
p2{std::move(p1)}
건설 움직임이다 p2
에서 p1
. 그것은 내가 위에서 인용 한 텍스트에서 요청 된 소유권 이전입니다 . 이동 생성자 구현은 모든 사후 조건이 충족되었는지 확인합니다.
::move
으로 요소 를 떠나는 상태 는 지정되지 않습니다. 나는 스마트 포인터의 끝에서도 보장이 없다고 생각합니다. 그게 내가 :) 대답에 CPP 전문가로 떠날거야 말했다