如果 X 类派生自 Y 类并且 Y 类具有以下任何一种:
- 用户声明的复制构造函数,
- 用户声明的复制赋值运算符,
- 用户声明的析构函数
- 用户声明的移动构造函数,
- 用户声明的移动赋值运算符,
移动构造函数和移动赋值运算符是否会隐式默认为 X 类,前提是它没有声明上述任何内容?
例如
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,但我主要对正确的行为应该是什么感兴趣(而不是特定编译器是否符合标准)..