专业编程基础技术教程

网站首页 > 基础教程 正文

C++里面的虚析构函数 虚构造函数与虚析构函数

ccvgpt 2024-11-12 09:55:14 基础教程 3 ℃

C++的虚构函数可以定义为虚函数,这个在类需要继承的时候是至关重要的。

比如:

C++里面的虚析构函数 虚构造函数与虚析构函数

#include <iostream>
using namespace std;

class Base {
public:
    void hello() {
        cout << "helloworld" << endl;
    }
};

class Derived: public Base {
public:
    Derived(): Base() {

    }
    ~Derived() {
        cout << "Derived destructor." << endl;
    }
};

int main() {
    Base* pBase = new Derived();
    pBase->hello();
    delete pBase;
    return 0;
}


可以看到,Base class没有定义析构函数函数,当我们delete的时候使用Base的指针的时,Derived类的析构函数不会被调用。

现在我们定义一个析构函数:

class Base {
public:
    void hello() {
        cout << "helloworld" << endl;
    }
    ~Base() {
        cout << "Base destructor" << endl;
    }
};


运行结果如下,可以看到Base的析构函数确实被调用了,但是Derived析构函数还是没有调用。


最好我们把析构函数申明为虚函数:

class Base {
public:
    void hello() {
        cout << "helloworld" << endl;
    }
    virtual ~Base() {
        cout << "Base destructor" << endl;
    }
};


这次才真正把子类的析构函数给调用了:


所以在C++语言里面,如果没有特殊原因,还是建议把析构函数定义为虚函数。

最近发表
标签列表