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也默认设置为更安全或更正确吗?
答案 0 :(得分:1)
据我了解,我已经删除了move构造函数和move assig.operator。
正确。
尽管要注意,复制构造函数和赋值运算符是隐式生成的,因此该类为MoveConstructible和MoveAssignable。
可以像这样保持它正常,还是将move构造函数和assig.operator也默认设置为更安全或更正确?
在安全性上没有什么区别。在基座具有有效移动的成员(例如矢量)或不可复制的成员的情况下,这将很有用。但是foo_base
没有这些。
最好通过不显式默认值来简化类。基于同样的理由,最好不要显式删除默认的构造函数,因为该构造函数是不必要的。
您应该选择显式还是降低噪声很大程度上取决于意见。