如果类X派生自类Y,而类Y具有以下任何一项:
例如:
- 用户声明的复制构造函数
- 用户声明的复制赋值运算符
- 用户声明的析构函数
- 用户声明的移动构造函数
- 用户声明的移动赋值运算符
例如:
struct Y
{
virtual ~Y() {}
// .... stuff
};
struct X : public Y
{
// ... stuff but no destructor,
// no copy/move assignment operator
// no copy/move constructor
// will X have a default move constructor / assignment operator?
};
我目前正在使用gcc,但我主要关心的是正确的行为应该是什么(而不是某个编译器是否符合标准)。
virtual ~Y() = default;
而不是自己定义析构函数(尽管您的编译器可能还不支持它)。 - Luc Dantonvirtual ~Y() = default;
,那么编译器会隐式地默认移动构造函数/赋值运算符吗?还是我需要显式地默认这些操作? - mark