2
#include <vector>
#include <iostream>
#include <memory>
int main()
{
// create the vector
std::vector< std::unique_ptr<int> > v;
for (int i = 0; i < 5; ++ i)
{
std::unique_ptr<int> newItem(new int(i));
v.push_back(std::move(newItem));
}
std::cout<<"vector's size before the move = " << v.size() << std::endl;
// move one item
auto it = move(v[2]);
std::cout<<"moved element = " << *it << std::endl;
std::cout<<"vector's size after the move = " << v.size() << std::endl;
if (nullptr == v[2].get())
std::cout<<"it is nullptr" << std::endl;
}
위의 예는 벡터에서 하나의 요소를 이동하지만 벡터의 크기는 동일하게 유지됩니다.이동되는 벡터의 요소는 무엇입니까?
이동 후 이동 한 요소가 무엇입니까? 해당 요소에 액세스하는 것이 정의되지 않은 동작입니까? 그것은 nullptr입니까? (예제에서는 null입니다)?
이 뒤에 이론적 근거가 이동 된 요소가 파괴 할 상태에 있어야한다는 것입니다 이동합니다. –
+1. 하지만, 예기치 않게 오랜 시간 동안 할당 된 리소스를 남겨 둘 수 있기 때문에 이동 할당이 스왑과 동등하지 않아야한다고 감히 말합니다. 그래서 (3)의 경우는 내가 기대하는 것이 아닙니다. – sellibitze
@sellobitze : 아니오, 나는 그것이 합법적 인 것으로서 일반적인 일의 예가되도록 의도하지 않았기 때문에 일어 났을 때 범한 일이 될 수는 없습니다. –