в настоящее время я играю со ссылкой на rvalue (C ++ 11, g ++ с gnu ++ x0), и я хочу реализовать семантику перемещения в своих классах, потому что это просто кажется "верно".
Нужно ли мне перегружать каждую функцию, которая обычно принимает ссылку на const lvalue, чтобы получить выгоду от ссылок rvalue?
Допустим, это мой пример класса:
class Person {
public:
Person() = default;
Person(std::string &name);
Person(const Person &rhs);
Person(Person &&rhs);
Person& operator=(const Person &rhs);
Person& operator=(Person &&rhs);
std::string& get_name() const;
void set_name(const std::string &name);
private:
std::string name_;
}
/* snip */
void Person::set_name(const std::string &name)
{
this->name_ = name;
}
Теперь я хочу использовать установщик со ссылками на rvalue и исключить ненужные копии.
Person test("Jon Doe");
test.set_name("Jon Doe2");
Действительно ли мне нужно таким образом перегружать каждый метод?
void Person::set_name(std::string &&name)
{
this->name_ = std::move(name);
}
Мне это кажется слишком избыточным. Есть ли способ сделать это проще?
Спасибо!
(Я часто читаю stackoverflow, но это мой первый вопрос. Пожалуйста, дайте мне подсказку, если я делаю что-то не так.)