前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每日一问06 构造函数可以是虚函数吗

每日一问06 构造函数可以是虚函数吗

作者头像
早起的鸟儿有虫吃
发布于 2021-01-05 02:11:21
发布于 2021-01-05 02:11:21
72600
代码可运行
举报
文章被收录于专栏:算法之美算法之美
运行总次数:0
代码可运行
技术分类:开发语言
前置知识:虚函数工作原理
推荐阅读 :[侯捷]C++内存管理--从平地到万丈高楼

https://www.bilibili.com/video/BV1Kb411B7N8

思路 构造函数可以是虚函数吗,为什么

和普通函数对比

首先,C++不支持虚拟构造函数。是有构造函数特点决定的

  • 虚函数使用条件必须是通过指针或者引用调用 构造函数无法通过指针直接调用。只能通过 placement new方式调用。void* operator new (std::size_t size, void* ptr) noexcept 构造函数不能成为虚函数
  • 构造函数无法继承,只属于具体一个类。无法抽象。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
关于C++为什么不支持虚拟构造函数,Bjarne很早以前就在C++
Style and Technique 
FAQ里面做过回答:A
virtual call is a mechanism to get work done given partial
information.

In particular, "virtual" allows us to call a
function knowing only an interfaces and not the exact type of the
object. 

To create an object you need complete information. In
particular, you need to know the exact type of what you want to
create. Consequently, a "call to a constructor" cannot be

virtual.出处:Stroustrup: C++ Style and Technique FAQ

作者:左轻侯
链接:https://www.zhihu.com/question/35632207/answer/63936329
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我的误区

  • 根本说不清楚:直接回答vptr构造 不相关,

不懂 构造函数无法通过指针访问原理,new 如何调用类构造函数申请的用法。

  • 根本说不清楚:必须创建好了,才能用,不懂

抽象和具体关系.接口不属于具体一个类

析构函数可以是虚函数吗,为什么

参考思路:

  • 可以是
  • 析构函数 执行顺序是 派生类 ,基类

如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向派生类的基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。

如果声明了,触发 派生类 ,基类 正确析构顺序。

  • 具备了c++ RTTI(运行时类型识别)

参考

  • https://leetcode-cn.com/circle/discuss/9kE1Sc/
  • http://www.cplusplus.com/reference/new/operator%20new/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 技术分类:开发语言
  • 前置知识:虚函数工作原理
  • 推荐阅读 :[侯捷]C++内存管理--从平地到万丈高楼
  • 思路 构造函数可以是虚函数吗,为什么
  • 我的误区
  • 析构函数可以是虚函数吗,为什么
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档