当前位置: 首页 > news >正文

C++学习笔记 35 虚析构函数

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

  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()
------------------------
------------------------

四、总结

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

http://www.zskr.cn/news/143279.html

相关文章:

  • 深度解析Salesforce、Google、微软三大巨头的AI Agent战略布局与实战应用!
  • 挑战自我:如何在3个月内快速掌握工业级开发能力?AI架构师为0基础小白量身打造的超详细学习路线图!
  • PLSQL:候选字段选择
  • 2025 GEO自建vs外包决策分析:投入产出完整测算
  • 程序员必看:大模型(LLM)核心原理与实战应用详解(建议收藏)
  • 2026 高品质短剧音乐素材网站推荐:商用授权齐全,一键下载即用
  • Java:“object is not declare class”
  • Windows系统文件MSPRPCHS.DLL丢失找不到 下载修复方法
  • 热门短剧 BGM 网站合集:音质高清,适配短剧片头 / 转场 / 结局情节
  • 2025年十大IT领导层访谈盘点
  • 软件无法启动 找不到msjtes40.dll文件 下载修复方法
  • 东方博宜OJ 1335:土地分割 ← 递归求“最大公约数”
  • 高效查找短剧背景音乐网站:正规授权+高清无损,新手快速上手
  • Windows系统文件mskeyprotect.dll损坏 下载修复方法
  • 在 Android 上备份短信:保护您的对话
  • 苹果在Cloudflare 2025年全球互联网服务排名中位列第三
  • 4 STM32学习板入门视频教程 STM32芯片功能介绍
  • Vue customRef
  • OpenWRT 24.10下使用radvd发送IPv6 RIO路由
  • 64 位 Windows 对 32 位程序的兼容处理
  • AI 原生应用开发框架深度解析:从单智能体到多智能体协同开发 - 2
  • 全面掌握AI大模型:从零基础入门到实战应用的七阶段学习路线图全攻略!
  • P11398 众数
  • Web自动化测试框架
  • 数据里的“平行宇宙”:用分支管理实现数据的版本控制
  • 探索Maxwell外转子电机设计与电磁仿真
  • 软件测试:如何进行微服务测试?
  • Jmeter 性能-需求分析业务/场景设计
  • 【必藏】从RAG到Agent的坑,看懂本体工程如何成为LLM时代的真正胜负手
  • NVIDIA显卡疑难杂症:全面诊断与修复指南