표준은 객체가 이동 한 후에 할 수있는 것을 정확하게 정의합니까? 이동 된 객체로 할 수있는 모든 것은 그것을 파괴하는 것이라고 생각했지만 충분하지는 않습니다.
예를 들어 swap
표준 라이브러리에 정의 된 함수 템플릿 을 사용하십시오.
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
분명히 이동 된 객체에 할당 할 수 있어야합니다. 그렇지 않으면 2 행과 3 행이 실패합니다. 객체에서 이동하여 다른 작업을 수행 할 수 있습니까? 표준에서 이러한 세부 정보를 정확히 어디에서 찾을 수 있습니까?
(그런데, 왜 그 것이다 T c = std::move(a);
대신에 T c(std::move(a));
라인 1?)
pop_back
, 이동 출처를 원하지 않을 것입니다vector
. 그러나 그것이 사실인지 확실히 알 수 있습니다empty()
.