首页文章正文

构造函数可以声明为虚函数,动态多态是由纯虚函数实现的

析构函数不可以是虚函数 2023-08-29 15:59 938 墨鱼
析构函数不可以是虚函数

构造函数可以声明为虚函数,动态多态是由纯虚函数实现的

∩^∩ 虚函数对应一个虚指针,虚指针其实是存储在对象的内存空间的。如果构造函数是虚函数,就需要通过虚函数表中对应的虚函数指针(编译期间生成属于类)来调用,可对象目构造函数不需要是虚函数,也不允许是虚函数,因为创建一个对象时我们总是要明确指定对象的类型,尽管我们可能通过实验室的基类的指针或引用去访问它但析构却不一

虚函数对应一个vtable,可是这个vtable其实是存储在对象的内存空间的。那么问题来了,如果构造函数是虚函数,就要通过vtable来调用,可是对象空间还没有实例化,也那么问题又来了,析构函数可以是虚函数吗?答:可以把基类析构函数定义为虚函数,在调用析构函数时,会根据指向的对象类型到它的虚函数表中找到对应的虚函数,此时找到的是派生类的析构

╯ω╰ 为什么构造函数不能为虚函数?1)从存储空间角度虚函数对应一个虚函数表vtable,这个vtable其实是存储在对象的内存空间的。但是,如果构造函数是虚的,就需要通过构造函数不能声明为虚函数,而析构函数可以声明为虚函数,在有的情景下析构函数必须声明为虚函数。不建议在构造函数和析构函数里调用虚函数。构造函数不能声明

⊙▽⊙ 构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用虚函数。构造函数不能声明为虚函数的原因构造函数不能定义为虚函数。在构造函数中可以调用虚函数,不过此时调用的是正在构造的类中的虚函数,而不是子类的虚函数,因为此时子类尚未构造好。虚函数对应一

即自定义类类型)的虚拟Create方法,而这个子类储存了相关类的meta

●0● data,因此避免了“虚拟构造函数不5) 构造函数不能是虚函数。对于基类的构造函数,它仅仅是在派生类构造函数中被调用,这种机制不同于继承。也就是说,派生类不继承基类的构造函数,将构造函数声明为虚函数没有什

后台-插件-广告管理-内容页尾部广告(手机)

标签: 动态多态是由纯虚函数实现的

发表评论

评论列表

灯蓝加速器 Copyright @ 2011-2022 All Rights Reserved. 版权所有 备案号:京ICP1234567-2号