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类的析构函数不会被调用。 ![]() 现在我们定义一个析构函数:
![]() 运行结果如下,可以看到Base的析构函数确实被调用了,但是Derived析构函数还是没有调用。 ![]() 最好我们把析构函数申明为虚函数: class Base {public: void hello() { cout << 'helloworld' << endl; } virtual ~Base() { cout << 'Base destructor' << endl; }}; ![]() 这次才真正把子类的析构函数给调用了: ![]() 所以在C++语言里面,如果没有特殊原因,还是建议把析构函数定义为虚函数。 |
|
来自: 菌心说 > 《编程+、计算机、信息技术》