Хорошо, я читал о значениях, и они кажутся отличной идеей, но что-то меня беспокоит. В частности, претензия на перемещение позволяет украсть ресурсы и избежать копирования.
Я понимаю, что перемещение работает и избегает копирования для всего, что происходит в стеке, но в конечном итоге большая часть работы со стеком дает некоторое значение, которое мы хотим скопировать в кучу, и я не думаю, что это перемещение работы.
Предполагая, что int имеет оператор присваивания перемещения, учитывая следующий код:
struct Foo
{
int x;
};
void doIt()
{
Foo* f = new Foo();
f->x = (2 + 4);
}
Таким образом, в этом примере r-значение, полученное из (2 + 4), можно предположительно перенести в f-> x вместо копирования. Хорошо отлично Но f и, следовательно, f-> x находятся в куче 1009 *, а это значение находится в стеке 1011 *. Кажется невозможным избежать копии. Вы не можете просто указать f-> x на память значения. Это значение будет сдуло, как только оно закончится. Копия кажется необходимой.
Так я прав, что копия будет сделана?
Или я не прав?
Или я полностью неправильно понял концепцию rvalue?