明确违约移动构造函数(Explicitly defaulted move constructor)

2019-06-25 10:34发布

根据C ++ 11标准默认转移构造仅产生,如果:

  • X没有一个用户声明拷贝构造函数,
  • X没有一个用户声明的拷贝赋值运算符,
  • X没有一个用户声明的举动赋值运算符,
  • X没有一个用户声明的析构函数,和
  • 此举构造不会被隐式定义为删除。

我还可以明确违约呢? 似乎在铛正常工作。 像这样的例子:

class MyClass {
private:
  std::vector<int> ints;
public:
  MyClass(MyClass const& other) : ints(other.ints) {}
  MyClass(MyClass&& other) = default;
};

Answer 1:

该规则的动机是,如果默认的拷贝构造函数不适合你的班上做,那么很有可能是默认的移动构造函数将无法工作,要么(规则第5条,或什么我们达在C ++ 11) 。 所以,是的,你可以明确地默认情况下,在你的荣誉,作为一个程序员,它会工作。

在你的示例代码,你可以删除,而不是拷贝构造函数,因为它不一样的默认值。



Answer 2:

是的,你总是可以明确地调用默认生成的可与自动生成功能= default 。 这是语法是什么。



文章来源: Explicitly defaulted move constructor