大多数C++书籍都说在我们没有自己定义构造函数的时候,编译器会自动生成默认构造函数。其实这句话我一直也是

深信不疑。但是最近看了一些资料让我有了一点新的认识。

其实我觉得大多数C++书籍之所以这样描述其实是玩了文字游戏的。如果说编译器自动产生的默认构造函数对于我们

的类没有任何作用,也就是说在编译器默认生成的这个构造函数里根本没有任何实质性的代码工作,那么这种默认构

造其实是可有可无的,所以不妨说编译器其实是为每个类生成了默认构造函数的。

在深度探索C++对象模型中讲了四种关于编译器自动生成默认构造函数的情况,在这四种情况下生成的默认构

造函数里面是由实质的隐含代码操作的:

1.如果类A成员中含有某个类B的对象,恰好类B也显示定义了构造函数,那么在产生类A对象的时候编译器会产

生一个默认构造函数,在这个默认构造函数中提供了调用类A构造函数的代码。

2.如果类B继承于类A,且类A显示定义了构造函数,那么在生成类B对象的过程中编译器同样会产生一个默认构

造函数,在这个构造函数中提供调用基类A构造函数的代码。

3.如果某个类含有虚函数,那么编译器会自动产生一个默认构造函数以提供虚表指针相关的初始化操作。

4.如果一个类虚继承于其他类,那么同样的编译器会为该类产生默认的构造函数。

除以上四种情况,编译器都不产生默认构造函数,因为就算编译器产生了默认构造函数,然而在该默认构造函数中没

有实质的内容,那么这个默认构造函数也就是没存在的意义的,那么我们说编译器不产生也无妨吧。

转载于:https://www.cnblogs.com/vpoet/p/4691751.html

C++默认构造函数的一点说明相关推荐

  1. 构造函数调用默认构造函数_显式无参数构造函数与默认构造函数

    构造函数调用默认构造函数 大多数不熟悉Java的开发人员都会Swift了解到,如果他们没有指定至少一个显式构造函数,则会为Java类隐式创建一个" 默认构造函数 "( 由javac ...

  2. 显式无参数构造函数与默认构造函数

    大多数不熟悉Java的开发人员在没有指定至少一个显式构造函数的情况下 ,会很快了解到为其Java类隐式创建了" 默认构造函数 "( 由javac ). Java语言规范的 8.8. ...

  3. C++默认构造函数的合成

    默认构造函数的误解 1.当程序猿定义了默认构造函数,编译器就会直接使用此默认构造函数 来一个简单的栗子 class Student; class School { public: School(){} ...

  4. C/C++编程:默认构造函数的建构操作

    C++标准提出:默认构造函数会在需要的时候被编译器生成.那什么时候被需要?被谁需要?做什么呢? class Foo{public:int val;Foo *next; };void foo_bar() ...

  5. c++ 虚函数_到底什么情况下会合成默认构造函数?

    来源:https://www.cnblogs.com/QG-whz/p/4676481.html 作者:good luck 编辑:公众号[编程珠玑] 编辑注:没有构造函数的时候编译器一定会生成默认构造 ...

  6. C++编译器会对没有构造函数的类生成默认构造函数吗?

    之前在上C++的课的时候,印象中有那么一句话: 如果一个类没有任何构造函数,那么编译器会生成一个默认的构造函数 今天在看<深度探索C++对象模型>的第二章:"构造函数语意学&qu ...

  7. C++编译器何时为用户提供默认构造函数

    第一种是类成员中有成员是类对象,并且该成员的类含有默认构造函数,那么C++编译器会帮你给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造.需要强调的是,如果这个成员的 ...

  8. move std 函数 示例_确保(值类型)可拷贝类有默认构造函数

    C.43: Ensure that a copyable (value type) class has a default constructor C.43:确保(值类型)可拷贝类有默认构造函数 Re ...

  9. C++ 编译器默认构造函数奇怪问题

    非常奇怪的问题,如下 struct MyType { public:     int i;     void* operator new(size_t size,void *p,int i)     ...

最新文章

  1. 用C语言解“混合类型数据格式化输出”题
  2. 烦人,周报要不要取消?| 每日趣闻
  3. 到底会改名吗?微软GVFS 改名之争
  4. fs react 使用 保存文件_使用FS进行文件同步和备份
  5. 在VB应用程序中调用Excel2000
  6. oracle 增量设为3 循环_Oracle 差异性增量 和 累计增量 原理(转)
  7. 知识即战斗力!数学家华罗庚投入特殊抗战,一夜译破日军密码
  8. VS系列IDE(2005、2008等)下使用cppunit的方法及使用示例
  9. 电力物联网智慧路灯充电桩传感器技术应用方案
  10. TIA Portal
  11. 我眼中的Android Framework
  12. GoC全教程(附各种下载、教程链接)
  13. linux 执行play war,centos下执行war包
  14. 生成验证码时,验证码图片不显示,报错信息如下:Can‘t create output stream;Can‘t create cache file
  15. 智己让上汽的高端梦第一次落地
  16. 颜色的搭配适用,摘自某论坛
  17. echarts4.8.0最新版本下载,亲测可用
  18. 美团网站底部超链接部分设计实现
  19. php file_put_contents 根目录权限,php – Composer:file_put_contents(./ composer.json):无法打开流:权限被拒绝...
  20. MQTT 客户端收发 MQTT 消息

热门文章

  1. C#流对象使用完后不立即释放的问题
  2. Spring Boot 入门例子 Hello world - TerryHe 博客园
  3. easyui treegrid idField 所在属性中值有花括号(如Guid)当有鼠标事件时会报错,行记录一下...
  4. system-copy 和 ShellExecute 用法
  5. 老公和老婆的15个关于......
  6. 去哪儿网产品经理的专属心得:产品经理的核心价值
  7. 【运营干货】三分钟,读懂互联网运营
  8. 基于zookeeper实现系统配置中心
  9. 【NLP】【七】fasttext源码解析
  10. 《程序员跳槽全攻略》笔记