C++ 虚析构函数的作用?

简介: C++ 虚析构函数的作用?

一、作用:

在继承下,为了使子类析构函数能得到正常调用,需要将基类的析构函数设置为虚析构函数

二、什么场景下?

子类对象指针赋值给基类指针,在调用析构函数的时候,子类对象的析构函数得不到调用

三、为什么设计?

  • 在 C++ 看来,我们设计某个类,不一定是基类
  • 如果该类是基类,我们应该手动将基类的析构函数设置为虚函数
  • 设置虚析构函数是有代价的,编译器会为类生成虚函数表,每个对象都需要持有 vptr

推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:

零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)

https://xxetb.xet.tech/s/VsFMs


相关文章
|
C++
53 C++ - 虚析构函数
53 C++ - 虚析构函数
34 0
|
7月前
|
C++
C++|多态性与虚函数(2)|虚析构函数|重载函数|纯虚函数|抽象类
C++|多态性与虚函数(2)|虚析构函数|重载函数|纯虚函数|抽象类
|
存储 编译器 C++
<c++>虚函数与多态 | 虚函数与纯虚函数 | 多态的实现原理 | 虚析构函数
<c++>虚函数与多态 | 虚函数与纯虚函数 | 多态的实现原理 | 虚析构函数
146 0
【C++】 --- 虚析构函数
【C++】 --- 虚析构函数
66 0
|
缓存 Java 编译器
C++中为多态基类声明虚析构函数
C++中为多态基类声明虚析构函数
217 0
|
C++ 容器 C语言
读书笔记 effective c++ Item 7 在多态基类中将析构函数声明为虚析构函数
1. 继承体系中关于对象释放遇到的问题描述 1.1 手动释放 关于时间记录有很多种方法,因此为不同的计时方法创建一个TimeKeeper基类和一些派生类就再合理不过了: 1 class TimeKeeper { 2 3 public: 4 5 TimeKeeper(); 6 7 ~TimeKeeper(); 8 9 .
1144 0
|
C++
C++语言基础 例程 虚析构函数
贺老师的教学链接  本课讲解 问题的由来 #include <iostream> using namespace std; class Point { public: Point( ) { } ~Point() { cout<<"executing Point destructor"<<endl; } };
970 0
|
C++
C++虚析构函数解析
  当派生类对象从内存中撤销时一般先运行派生类的析构函数,然后再调用基类的析构函数。 如果用new运算符建立的派生类的临时对象,对指向基类的指针指向这个临时对象当用delete运算符撤销对象时,系统执行的是基类的析构函数,而不是派生类的析构函数,不能彻底的“清理现场”。
810 0
C++构造函数、析构函数、虚析构函数
1.构造函数   C++中的构造函数是用于初始化类的各种变量以及分配资源等。主要的注意事项是:   (1)在继承关系中先初始化父类对象后初始化子类对象。   (2)在一个类中按照变量的声明顺序,对类中的变量进行初始化。
1271 0
|
C++
C++学习笔记 -- 虚析构函数与纯虚析构函数
开始学C++了,所以又重拾以前学习过的相关概念… 析构函数是当一个对象的生命周期结束时,会自动执行析构函数。 析构函数的定义: #ifndef __A_H__#define __A_H__class A{public: A(void); A(int a, int b); ...
1467 0