В настоящее время я играю со ссылкой на rvalue (C ++ 11, g ++ с gnu ++ x0), и я хочу реализовать семантику перемещения в моих классах, потому что она кажется «правильной».
Нужно ли перегружать каждую функцию, которая обычно принимает константную ссылку на значение, чтобы извлечь выгоду из ссылок на значение?
Допустим, это мой пример класса:
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, но это мой первый вопрос. Поэтому, пожалуйста, дайте мне подсказку, если я делаю что-то не так.)