Я видел код где-то, где кто-то решил скопировать объект, а затем переместить его в член данных класса. Это оставило меня в замешательстве в том, что я думал, что все дело в том, чтобы избежать копирования. Вот пример:
struct S
{
S(std::string str) : data(std::move(str))
{}
};
Вот мои вопросы:
- Почему мы не берем ссылку rvalue на
str
? - Не будет ли дорогая копия, особенно учитывая что-то вроде
std::string
? - Какова была бы причина, по которой автор решил сделать копию, а затем двигаться?
- Когда мне это делать самому?