가정하자 나는 몇 가지 데이터를 보유하는 객체가 있습니다올바른 매개 변수 유형
struct Object
{
std::vector<float> data;
}
그리고 일부 개체 유지하는 구조체 :
struct Holder
{
private:
std::vector<Object> objects_;
}
호출 코드가 객체를 구축하고 싶어를 Object가 수백만 개의 요소를 포함 할 수 있으므로 복사본을 만들지 않고 Holder에 추가합니다.
struct Holder
{
void addObject(Object& object)
{
objects_.push_back(std::move(object));
}
private:
std::vector<Object> objects_;
}
그러나, 다른 프로그래머가 홀더에 전달 된 객체가 :: addObject가 지정되지 않은 상태로두고 그 위에 계속 작동합니다 알고하지 않을 수 있습니다 : 내 초기 생각은 홀더가 이동을 처리 할 수 있도록했다. 따라서, 나는 다른 사본이 구성되어, 명시 적으로 사본으로 객체를 이동하는 코드를 호출에두고 : 같은
struct Holder
{
void addObject(Object object)
{
objects_.push_back(std::move(object));
}
private:
std::vector<Object> objects_;
}
호출 코드는 다음 같습니다 표준의 사용인가
Holder h;
Object o;
// populate c
h.addObject(std::move(o))
:: 이 맥락에서 움직이는 것이 맞습니까? 이 대안을 처리하는보다 정확하고 분명한 방법이 있습니까?
만들기'Object' 이동하지만, 복사 가능한 당신이 뭔가를 잘못 할 경우 컴파일러는 당신을 말할 것이다 없습니다 – Slava