Por que copiamos e depois movemos?
Eu vi o código em algum lugar em que alguém decidiu copiar um objeto e, em seguida, movê-lo para um membro de dados de uma classe. Isso me deixou confuso, pois achei que o objetivo da mudança era evitar a cópia. Aqui está o exemplo:
struct S
{
S(std::string str) : data(std::move(str))
{}
};
Aqui estão minhas perguntas:
Por que não estamos tomando uma referência de valor parastr
?Uma cópia não será cara, especialmente dada algo comostd::string
?Qual seria a razão para o autor decidir fazer uma cópia e depois mudar?Quando devo fazer isso sozinho?