指向派生类的指针是否首先创建Base类?

Arp*_*ana 2 c++ inheritance pointers base-class derived-class

我有以下代码

#include <iostream>
using namespace std;

class B{
    int i;
    public:
    B(){
        cout << "Constructing B\n";
    }
    void print(){
        cout << "Printing from B with size : "<<sizeof(*this)<<endl;
    }
};



class D:public B{
    int i;
    public:
    D(){
        cout << "Constructing D\n";
    }
    void print(){
        cout << "Printing from D with size : "<<sizeof(*this)<<endl;
    }
};


int main(){

    B b;
    b.print();
    D d;
    d.print();

    D* dp;
    dp->print();
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

Constructing B
Printing from B with size : 4
Constructing B
Constructing D
Printing from D with size : 8
Printing from D with size : 8
Run Code Online (Sandbox Code Playgroud)

因此,当您创建指向派生类的指针时,它是不是首先创建基类的实例?我不认为它是真的,因为D类的大小是证明.但它甚至没有调用基类构造函数.有谁能解释一下?

AnT*_*AnT 5

指针不会创建任何东西.指针只是指针 - 包含地址的标量对象.您有责任指出指向内存中的正确位置.

在您的示例中,指针dp未初始化.你永远不会把它指向任何地方,所以它无处可寻.您的调用尝试会dp->print()产生未定义的行为.故事结局.