当使用基类指针时,派生类不会调用基类的构造函数



为什么在下面的代码中基类构造函数没有被调用两次?

#include<iostream>
using namespace std;

class base{
public:
base(){cout << "In the Base Constructorn"; }
~base(){
cout << "In Base Destructorn";
}
};
class derived: public base{
public:
derived(){cout << "In Derived Constructorn";}
~derived(){
cout << "In Derived Destructorn";
}
};
int main(){
base *bptr;
derived d;
}

输出:

在基础构造函数中

在派生构造函数中

在派生析构函数中

基地内自毁

一定是因为指针的缘故。但我不清楚为什么?

这是一个指向某些东西的指针。

base *bptr;

它未初始化
它不指向任何干净的东西
它特别不指向任何已创建的对象
即使执行了,也不会导致执行任何构造函数
如果指针指向任何对象,那么该对象的创建就会更早地发生在其他地方。

这定义了一个对象:

derived d;

这就是观察到的构造函数执行的原因。

最新更新