Re[7]: про перемещение вопрос
От: B0FEE664  
Дата: 17.05.19 16:15
Оценка:
Здравствуйте, rg45, Вы писали:

BFE>>1. Такое поведение неожиданно.

R>Какое "такое"?

вызов выглядит так:
bar.set_foos(std::move(foos));

Я ожидаю, что после этого foos не владеет никакой динамической памятью. Впрочем, быть может, это мои проблемы.

BFE>>2. Зачем тут &&? Достаточно простой ссылки.

R>А вот это как раз будет неожиданно, когда foos вдруг лишится своих элементов в таком сценарии:
R>
R>Bar bar;
R>std::vector<Foo> foos {/*. . . */};
R>bar.set_foos(foos);
R>

Тут я согласен, так делать не следует.
Меня смущает другое: семантика перемещения используется не понятно зачем. Какое же это перемещение?
Ещё меня смущает то, что объект используется после того, как его переместили, но это мелочи.

R>Ты не замечаешь, что мы с тобой говорим про две разные функции? Я говорю про исходную set_foos, а ты ее уже мыслено зарефакторил, наделил ее другой семантикой и смотришь на нее как на swap_foos.


Ну это ещё как посмотреть... По мне это у вас поменялась семантика set_foos без изменения имени функции.
Я не против добавления функции set_foos(std::vector<Foo> &&foos) (или, быть может, set_foos(auto&& foos)), но только с ожидаемым поведением.

R>Давай я еще раз сформулирую свою позицию: для того, чтобы достичь оптимизации по скорости, о которой ты говоришь здесь
Автор: B0FEE664
Дата: 17.05.19
, не обязательно переделывать set_foos на swap_foos.


Я бы не стал переделывать, я бы просто добавил бы функцию swap_foos.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.