2021年9月13日
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,运行结果:
基类被构造
派生类被构造
基类被析构