目前我正在玩rvalue引用(C++ 11,g ++与gnu ++ x0),我想在我的类中实现移动语义,因为它感觉"正确".
我是否需要重载通常接受const左值引用的每个函数以从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;
}
Run Code Online (Sandbox Code Playgroud)
我现在想要使用带有右值引用的setter并消除不必要的副本.
Person test("Jon Doe");
test.set_name("Jon Doe2");
Run Code Online (Sandbox Code Playgroud)
我真的需要以这种方式重载每个方法吗?
void Person::set_name(std::string &&name)
{
this->name_ = std::move(name);
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很多余.有没有办法实现这个更容易?
谢谢!
(我经常阅读stackoverflow,但这是我的第一个问题.所以如果我做错了,请告诉我.)