좋아요, 저는 평범한 가치에 대해 읽었으며 훌륭한 아이디어처럼 보입니다.하지만 뭔가 계속 저를 귀찮게합니다. 특히 이동이라는 주장은 우리가 자원을 훔치고 복사를 피할 수있게합니다.rvalues C++ 0x 및 힙으로 이동
이동이 작동하고 스택에서 일어나는 모든 작업에 대한 복사를 피할 수 있지만 결국 스택에서 수행되는 대부분의 작업은 힙에 복사 할 가치가있는 값을 산출하며 이것이 내가 생각하지 않는 부분입니다 움직이게.
주어진 INT는 움직임 할당 연산자를 가지고 다음 코드를 가정하면,이 예에 따라서
struct Foo
{
int x;
};
void doIt()
{
Foo* f = new Foo();
f->x = (2 + 4);
}
를 상기 r- 수치 (2 + 4)의 결과가 아마 F- 넘어서 이동할 수> X 대신 복사 된 좋아, 좋아. 그러나 f와 결과적으로 f-> x는 힙에 있고 그 값은 스택에 있습니다. 사본을 피할 수없는 것처럼 보입니다. 당신은 단순히 r-> x가 r 값의 메모리를 가리킬 수 없습니다. 그 가치는 끝나자 마자 날아가 버릴 것입니다. 사본이 필요할 것 같습니다.
그래서 사본을 만들 수 있다고 생각합니까? 내가 틀린가요? 또는 rvalue 개념을 완전히 오해 했습니까?
뭔가 오해하는 것 같습니다. 이동은 마법이 아니며 할당/복사하는 것보다 int 값을 가져 오는 더 빠른 방법이 없습니다. – UncleBens
@UncleBens 글쎄, 나는 그것을 확인하려고하고있다. 나는 계속해서 rvalues를 읽으면 물건을 더 빨리 만들고 복사를 피한다. 그러나 나의 예에서와 같이, 필자는 실제로 복사가 필요하고 rvalues가 특정한 경우에만 도움이된다는 것을 확인하려고 노력하고있다. – anio
스칼라 유형의 객체 이동은 해당 객체를 복사하는 것과 같습니다. 보다 복잡한 유형의 경우 이동이 흥미 롭습니다.이동하는 경우 정확히 무엇이 발생합니까? 클래스 디자이너가하는 일입니다. 자신의 이동 생성자를 정의하여이 동작을 제어합니다. – sellibitze