1. 4种情况下编译器会构造出nontrivial(有用)的构造函数

    1. 带有default construction的member class object

      我们有两个class:

      class Foo { public: Foo(), Foo(int) … };

      class Bar { public: Foo foo; char *str;};

      1. 则编译器会在Bar中合成一个默认的构造函数(看起来像这样):

        Bar() { foo.Foo::Foo(); }
      2. 当我们自己定义了Bar一个或以上的构造函数时,编译器会为我们扩张

        每一个构造函数。比如我们自己定义:

        Bar() { str = 0;}

        则编译器就为我们扩张成:

        Bar() { foo.Foo::Foo(); str = 0; }
      3. 当有多个需要初始化的成员时,编译器会按照成员的声明次序来初始化成员
    2. 带有default construction的base class
    3. 声明或继承一个virtual function的class
      1. 一个virtual function table 会被编译器产生出来,内放class的virtual function 地址。
      2. 在每个class object中,一个额外的pointer member(vptr)会被编译器合成出来,内含

        相关的class vtbl的地址。
    4. 带有一个virtual base class的class

      对于virtual base class中的成员变量,derived class通过存放一个指针,指针中存放

      着对应的基类,用这样的方式来访问virtual base class中的成员变量。

      所以为了初始化这些指针,编译器会默认构造出或扩张nontrivial构造函数做这些初

      始化的工作。
  2. c++新手常见的两个误解
    1. 任何class如果没有定义default constructor,就会被合成出来。
    2. 编译器合成出来的default constructor会明确设定class内每个

      datamember的默认值。

      这两个没有一个是真的

最新文章

  1. IOS开发基础知识--碎片10
  2. <css篇>关于页面的绝对定位与相对定位,且支持页面各元素自适应
  3. python求范数
  4. group by语句
  5. Python 基础语法(三)
  6. IOS学习经验总结--来自知乎网友
  7. 在应用程序中实现对NandFlash的操作
  8. append
  9. (转) How to install eclipse in ubuntu 12.04
  10. JQuery的两个each方法的注意点
  11. AFNetworking 用法详解
  12. China Azure中部署Kubernetes(K8S)集群
  13. 22.jQuery(实例)
  14. C语言 - 栈和单链表的实现
  15. ajax传输中文参数乱码,本地使用tomcat不乱码,liunx+weblogic乱码
  16. 多线程——newFixedThreadPool线程池
  17. connection reset by peer问题总结及解决方案
  18. 关掉Windows Firewall的PowerShell
  19. Eclipse QuickSear的插件的说明
  20. VS2010/MFC编程入门之四十二(MFC常用类:CString类)

热门文章

  1. [20171120]11G关闭直接路径读.txt
  2. python第五十四天--第十周作业
  3. python基础、字符串和if条件语句,while循环,跳出循环、结束循环
  4. if语句的嵌套以及条件运算符和条件表达式(初学者)
  5. 【Nginx】启动,重启,关闭命令
  6. 简易 Token 验证的实现
  7. js如何获得局部变量的值
  8. [NOIP2018]旅行
  9. 转载 Spring详细教程
  10. mysql数据类型介绍(含text,longtext,mediumtext说明)