new和delete 基类指针指向继承类的对象过程

C++ new /delete 除了分配内存外,还自动调用构造函数/析构函数
new 分配内存后,调用构在函数,构造对象
delete 释放内存后,调用析构函数,析构对象。

结论:
基类的析构函数必须定义为虚函数,防止只析构基类而不析构派生类

#include<iostream>

using namespace std;

class A{
public:
    A(){cout<<"基类被构造\n";}
    virtual ~A(){cout<<"基类被析构\n";}
};

class B:public A
{
    public:
    B(){cout<<"派生类被构造\n";}
    virtual ~B(){cout<<"派生类被析构\n";}
};

int main()
{
    A *p=new B;
    delete p;
}

运行结果:
基类被构造
派生类被构造
派生类被析构
基类被析构

如果析构函数不是virtual,运行结果:
基类被构造
派生类被构造
基类被析构