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的默认值。

      这两个没有一个是真的

default construction的更多相关文章

  1. Thinking in Java——笔记(18)

    I/O The original byte-oriented library was supplemented with char-oriented, Unicode-based I/O classe ...

  2. 【Spring源码解析】—— 依赖注入结合SpringMVC Demo-xml配置理解

    在IOC容器初始化的梳理之后,对依赖注入做一个总结,就是bean实例化的过程,bean的定义有两种方式,一种是xml文件配置,一种是注解,这里是对xml配置文件的依赖注入的介绍,后续对bean与该部分 ...

  3. pl-svo代码解读

    pl-svo是在svo的基础上结合点和线特征的半直接法视觉里程计 程序启动通过app文件夹下的run_pipeline.cpp主程序启动,其它的函数文件统一放在src文件夹下,我们先从run_pipe ...

  4. C++ Core Guidelines

    C++ Core Guidelines September 9, 2015 Editors: Bjarne Stroustrup Herb Sutter This document is a very ...

  5. C++ std::thread

    std::thread Defined in header class thread The class thread represents a single thread of execution. ...

  6. Java - this的使用方法

    this在内部获得当前对象的引用时调用: (1) return返回当前对象; (2) 构造器调用还有一个构造器, 带參数; (3) 參数的名称和数据成员的名称同样; 注意: this构造器在方法中仅仅 ...

  7. IoC 之加载 Bean:总结

    上文中我们将bean已经加载到了IOC容器中,接下来我们将把IOC加载Bean出来进行代码解析 备注:(有些解释是参考别个博客的相关解释 )一起探讨请加我QQ:1051980588 bean 的初始化 ...

  8. Havok Physics 2012(2)

    目录 Havok Physics 2012 Chapter 2. Creating a Simulation 创建一个模拟世界 1. Creating Physics 2012 Objects Hav ...

  9. C++11智能指针之std::unique_ptr

    C++11智能指针之std::unique_ptr   uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云 ...

随机推荐

  1. JavaScript大杂烩14 - 使用JQuery(上)

    JQuery意义 - Why? 为什么要使用JQuery,从我个人来说,就是这么几点:简化代码 + 统一行为 + 功能强大 + 搭配方便. 简化代码是从写代码的角度来说的,实现同样的功能,如果用Jav ...

  2. python 定时修改数据库

    当需要定时修改数据库时,一般我们都选择起一个定时进程去改库.如果将这种定时任务写入业务中,写成一个接口呢,定时进程显得有些不太合适?如果需要定时修改100次数据库,常规做法会启动100个进程,虽然这种 ...

  3. SpringBoot整合定时任务

    定时任务一般是项目中都需要用到的,可以用于定时处理一些特殊的任务. 在SpirngBoot中使用定时任务变的特别简单,不需要再像SpringMVC一样写很多的配置,只需要在启动类上增加一个@Enabl ...

  4. [20171113]修改表结构删除列相关问题4.txt

    [20171113]修改表结构删除列相关问题4.txt --//连续写了3篇修改表结构删除列的相关问题,链接如下: http://blog.itpub.net/267265/viewspace-214 ...

  5. java 按字节读写二进制文件(Base64编码解码)

    最近在做项目时遇到这样一个需求:依次读取本地文件夹里所有文件的内容,转为JSON,发送到ActiveMQ的消息队列, 然后从MQ的消息队列上获取文件的信息,依次写到本地.常见的文件类型,比如.txt ...

  6. Git的gc功能

    http://blog.csdn.net/lihuanshuai/article/details/37345565 Git的底层并没有采用 CVS.SVN 底层所采用的那套增量式文件系统,而是采用一套 ...

  7. HDU ACM 1856 More is better(并查集)

    [题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=1856 [解题思路]给的数据有点大,干脆少开点数组,直接上set存储有朋友的孩子的编号,同时根据编号初 ...

  8. Oracle 11g 发行版2的安装,PLSQL_Developer安装 , Oracle数据库安装失败,完全卸载,常用的命令

    Oracle 11g 发行版2的安装 PLSQL_Developer安装 Oracle数据库安装失败,完全卸载oracle11g 常用的命令 Oracle 11g 发行版2的安装 1. 下载 下载地址 ...

  9. JDBC学习笔记之SQLException介绍

    1. SQLException 的概述 当使用 JDBC 与数据源(在本文中的数据源表示我们实际使用的数据库)进行交互的时候遇见错误的时候,将会抛出名为 SQLException 的异常.一个 SQL ...

  10. Go学习笔记03-结构控制

    目录 条件语句 循环语句 条件语句 条件语句用 if 关键字来判定条件,如: func bounded(v int) int { if v > 100 { return 100 } else i ...