我终于感觉到我了解现代C ++中的移动语义,并且它在编写代码的方式上发生了巨大的变化。现在,我正在开发一个使用依赖注入的应用程序,并结合了我对移动语义学的新发现,但是最终我使用了std::move()太多,以至于我担心自己使用不正确。
以前,如果要在对象中注入需要复制的依赖项,则可以这样编写我的构造函数:
class NeedsCopyOfFoo
{
public:
NeedsCopyOfFoo(const Foo& foo)
: m_myFoo{foo} {}
private:
Foo m_myFoo;
};
Run Code Online (Sandbox Code Playgroud)
现在,我的课程如下所示:
class NeedsCopyOfFoo
{
public:
NeedsCopyOfFoo(Foo foo)
: m_myFoo{std::move(foo)} {}
private:
Foo m_myFoo;
};
Run Code Online (Sandbox Code Playgroud)
我的设计中有一些类需要多达三到四个类类型的依赖关系,而最终我将它们全部移走了。显然,如果构造函数的调用者无法使用右值调用构造函数,但是在构造NeedsCopyOfFoo对象之后也将不使用依赖项,那么我也需要在此使用std::move()它,以避免完全不必要的复制。
这是Modern C ++应该看起来的样子吗?鲍勃叔叔是否提到“ std::move()经常使用” 的代码味道?我是否反应过度,因为我还不习惯这种新风格?