C++ 中 class 层次结构中的每个 class 是否会独立处理隐式定义的成员函数的生成?

Does generation of implicitly defined member functions get handled independently for every class in a class hierarchy in C++?

用户定义的“Rule of 5”函数(析构函数、复制构造函数、复制赋值运算符、移动构造函数或移动赋值运算符)在特定 class 中的存在是否影响这些函数将在其派生或基础 classes 中生成?如果是,是什么方式?

换句话说,如果我试图确定将为特定 class 隐式生成哪些函数,我是否需要有关它的父项或子项的信息 classes?

可选问题:这些函数之一在特定 class 中的存在是否会影响其他 classes 的隐式生成函数的生成代码在层次结构中?如果是,是什么方式?

编译器将始终为没有用户声明的析构函数的 class C 声明析构函数 (C++17 [class.dtor]/4)。但是,如果 C 的任何基 class 具有已删除或不可访问的构造函数,则 C 的析构函数也将被声明为已删除(p5)。

类似的语句适用于复制构造函数 ([class.copy.ctor]/6) 和复制赋值运算符 ([class.copy.assign]/2)。

在移动构造函数的情况下,如果用户没有声明 any 规则,编译器只会隐式声明它为 class C C ([class.copy.ctor]/8) 的 5 个函数。 C的基classes会影响C的移动构造函数是否删除,但不影响编译器是否生成声明。类似的语句适用于移动赋值运算符 ([class.copy.assign]/4).