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,运行结果:
基类被构造
派生类被构造
基类被析构