移动构造函数和移动分配。基类的运算符

时间:2019-03-29 14:44:32

标签: c++

struct foo_base
{
    explicit foo_base(int i) : i(i) {}
    foo_base() = delete;
    virtual ~foo_base() = default;
    int i;
}

我的课程不是管理资源,但是我已经声明了虚拟析构函数,因为它是多态的。据我了解,我已经删除了move构造函数和move assig.operator。可以像这样保留它,否则将move构造函数和assig.operator也默认设置为更安全或更正确吗?

1 个答案:

答案 0 :(得分:1)

  

据我了解,我已经删除了move构造函数和move assig.operator。

正确。

尽管要注意,复制构造函数和赋值运算符是隐式生成的,因此该类为MoveConstructible和MoveAssignable。

  

可以像这样保持它正常,还是将move构造函数和assig.operator也默认设置为更安全或更正确?

在安全性上没有什么区别。在基座具有有效移动的成员(例如矢量)或不可复制的成员的情况下,这将很有用。但是foo_base没有这些。

最好通过不显式默认值来简化类。基于同样的理由,最好不要显式删除默认的构造函数,因为该构造函数是不必要的。

您应该选择显式还是降低噪声很大程度上取决于意见。