我最近发现了此页面(https://cppinsights.io/)。我尝试一些代码:
class Base {
};
class Derived : public Base {
};
int main() {
Derived d;
Base& b = d;
}
我了解编译器会在Base类中创建构造函数,移动构造函数,复制构造函数和析构函数,并且仅Derived类中的构造函数会因为Base类中没有虚拟析构函数。但是当我添加
public :
~Base(){}
然后
public :
virtual ~Base(){}
,我看到了一些构造函数上的差异。第一次加法后,编译器还会在Derrived类中生成移动赋值运算符和析构函数,第二个加法后-虚拟析构函数,赋值运算符和移动赋值运算符。为什么?