首页 > 其他分享 >30虚析构函数

30虚析构函数

时间:2024-01-25 16:55:23浏览次数:19  
标签:函数 30 派生类 析构 基类 虚析构 构造函数

虚析构函数

  • 哪些为函数不能实现为虚函数?
    • 虚函数要能产生函数地址,并记录在虚函数表中。
    • 对象必须存在(vfptr->vftable->虚函数地址)。
    • 构造函数不能是虚函数,不满足第二点。且构造函数中调用的函数都是静态绑定的。过程是:先调用基类的构造函数,欲使用动态绑定,但此时还没有执行派生类的初始化,无法使用派生类的方法,因此不能使用动态绑定。
    • 静态成员方法,不满足第二点。
  • 虚析构函数
    • 析构函数调用时,对象是存在的。
    • 什么时候一定要实现虚析构函数?
      • 基类的指针pb(引用)指向堆上的派生类对象,delete pb不会调用派生类析构函数,可能造成内存泄漏,因此必须将基类析构函数实现为虚函数。
class Base
{
public:
	Base(int data = 10) : ma(data) { cout << "Base" << endl; }
	virtual ~Base(){ cout << "~Base" << endl; }

	virtual void show() { cout << "Base::show()" << endl; }
	virtual void show(int) { cout << "Base:show(int)" << endl; }
protected:
	int ma;
};

class Derive : public Base
{
public:
	Derive(int data = 20) : Base(data), mb(data) { cout << "Derive" << endl; }
	~Derive(){ cout << "~Derive" << endl; }  // 自动成为虚函数,会覆盖基类虚析构函数
	void show() { cout << "Derive::show()" << endl; }
private:
	int mb;
};

int main()
{
	Base* pb2 = new Derive(10);
	delete pb2;  //如果基类的析构函数非虚函数,那么就是静态绑定,只执行析构base,派生类未析构,可能造成内存泄露
	 
	return 0;
}

标签:函数,30,派生类,析构,基类,虚析构,构造函数
From: https://www.cnblogs.com/sio2zyh/p/17987524

相关文章

  • C++-类和对象(2)默认成员函数
    在上一篇博客中,和大家分享了C++中类和对象的定义,类的大小的计算等知识,那么如果C++中一个自定义类中不定义任何的成员变量和成员函数,那么这个类中就是一个什么都没有的空类了吗?实际上,如果在一个类中,如果类中什么成员都不定义,编译器会自动生成6个默认成员函数。接下来借助一个自定义M......
  • 中国移动CMCC rax3000m免拆机刷OpenWRT uboot 20231027 NAND emmc MT7981
    1、100大洋购买的CMCCARX3000,不刷系统的时候也挺好用,就是无法满足特殊需求2、输入路由地址、192.168.10.1,进入路由管理界面,账号和密码,设备背面默认3、在高级设置->管理->配置管理->导出配置文件、得到:cfg_export_config_file.conf文件 4、在linux系统下,Ubuntu下进行文件配......
  • JavaScript 中 eval() 函数
    JavaScript的eval()函数的作用是将一个字符串作为脚本代码进行解析和执行。它可以动态地执行字符串中的JavaScript代码,并返回执行结果。eval()函数可以用于执行任何有效的JavaScript代码,包括声明变量、定义函数、执行表达式等。eval()函数的语法如下:varformArray=$('#formRec......
  • Hive - 窗口函数
       1、窗口函数分组,分组聚合,聚合开窗函数和排序开窗函数 createtablestudent_scores( idint, studentIdint, languageint, mathint, englishint, classIdstring, departmentIdstring ); idstudentIdlanguagemathenglishclassIddepartme......
  • wr30u刷机
    前置工作路由器配置才买回来的路由器,插上电源,先不要插入网线,进入后台。在上网配置中,做以下配置:上网配置选择DHCP点击启动与智能网关无线配置同步(会重启)WAN口选择,改为固定WAN口,1口为固定WAN口。电脑配置打开控制面板-网络和Internet-网络和共享中心-选择WLAN-点击属......
  • 函数--递归调用
    1.怎么写出一个递归函数step1,写好公式公式是怎么得出的?一般来说通过数学上的归纳演绎、总结得出,具体看下面的例子。step2,一定要写结束条件这一步比较简单,还是得到公式比较关键。2.走楼梯Description假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n个台阶有几种走法?为......
  • dremio random 函数造成dremio crash 问题
    以前没注意使用random,在看社区问题的时候测试了下发现的确有类似的问题,官方的解决方法是通过配置禁用gandiva优化参考配置支持key格式 exec.disabled.gandiva-functions:<function>;<function>参考配置参考禁用处理sabot/kernel/src/main/java......
  • 转载——Linux/Macos环境下使用 steamcommunity 302 教程
    原博:https://www.dogfight360.com/blog/2319/steamcommunity302后端使用caddy,在生成所有配置文件后可直接迁移到Linux/Macos环境下使用1.首先要在Windows环境/Wine下运行steamcommunity302并在设置里打勾需要开启的功能,然后正常启动服务 2.前往caddy/release页下载......
  • python之内置函数
    内置函数                    1.absdefabs(*args,**kwargs):#realsignatureunknown"""Returntheabsolutevalueoftheargument."""pass翻译:返回参数的绝对值1#!/usr/bin/python2print(abs(-2))#绝对值View......
  • LPC和C对比(2) 函数
    目录函数默认值可变参数库函数efun模拟库函数sefun局部函数lfun系统方法apply简单示例环境(environment)和内容物(inventory)相关函数this_object()environment()all_inventory()deep_inventory()first_inventory()next_inventory()move_object()函数默认值2023.12之后添加的新......