C++面向对象入门(三十五)虚析构函数
虚析构函数: 使用virtual关键字修饰的析构函数
C++不支持虚构造函数, 但支持虚析构函数, 由于析构函数没有参数, 一个类只能有一个虚析构函数
虚析构函数的必要性: 使用基类的引用或者指向基类类型的指针调用析构函数完成派生类对象的析构(delete操作符自动调用对象的析构函数)
代码示例:
#include <iostream> using namespace std; /* 虚析构函数: 使用virtual关键字修饰的析构函数 C++不支持虚构造函数, 但支持虚析构函数, 由于析构函数没有参数, 一个类只能有一个虚析构函数 虚析构函数的必要性: 使用基类的引用或者指向基类类型的指针调用析构函数完成派生类对象的析构(delete操作符自动调用对象的析构函数) */ class A52 { public: A52(); virtual ~A52(); }; class B52 :public A52 { public: int *pb; B52(int b); virtual ~B52(); }; class C52 { public: C52(); ~C52(); }; class D52 :public C52 { public: int *pd; D52(int d); ~D52(); }; int main() { A52 *a = new B52(3); delete a; C52 *c = new D52(5); delete c; system("pause"); } A52::A52() { } A52::~A52() { cout << "~A52()" << endl; } B52::B52(int b) { pb = new int; *pb = b; } B52::~B52() { delete pb; cout << "~B52()" << endl; } C52::C52() { } C52::~C52() { cout << "~C52()" << endl; } D52::D52(int d) { pd = new int; *pd = d; } D52::~D52() { delete pd; cout << "~D52()" << endl; }
路漫漫其修远兮,吾将上下而求索。