泉州市网站建设_网站建设公司_JavaScript_seo优化
2025/12/23 21:08:21 网站建设 项目流程

一、虚析构函数的使用场景

  1. 父类引用指向子类对象,子类对象的析构函数不能被调用,只有父类的可以被调用

二、virtual函数

  1. 普通方法前标记为virtual, 那么它就可以被覆写,那么这就意味着要做虚函数表这样的设置。
  2. 析构函数不一样,virtual 析构函数, 不是覆写析构函数,而是加上一个析构函数。
  3. 如果把基类析构函数标记为virtual,则实际上会调用2个析构函数。先调用派生类的,再调用基类的。

三、代码

#include<iostream>class Base {
public:Base() { std::cout << "Base() \n"; }virtual ~Base() { std::cout << "~Base() \n"; }
};class Son : public Base {
public:Son() { std::cout << "Son() \n"; }~Son() { std::cout << "~Son() \n"; }
};void testVirtualDestructor() {Base* base = new Base();delete base;std::cout << "------------------------\n";Son* son = new Son();delete son;std::cout << "------------------------\n";Base* son2 = new Son();delete son2;std::cout << "------------------------\n";
}int main() {testVirtualDestructor();
}
  1. 基类虚构函数不带virtual
Base()
~Base()
------------------------
Base()
Son()
~Son()
~Base()
------------------------
Base()
Son()
~Base()
------------------------
  1. 基类虚构函数带virtual
Base()
~virtual Base()
------------------------
Base()
Son()
~Son()
~virtual Base()
------------------------
Base()
Son()
~Son()
~virtual Base()
------------------------
------------------------

四、总结

当写一个要拓展的类或子类时,这一点非常重要,只要你允许一个类拥有子类,你需要百分之一百的声明其析构函数为虚函数,否则没人能安全的拓展这个类,包括你自己也不能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询