zoukankan      html  css  js  c++  java
  • C++编译器合成Default Constructor的4种情况

    笔记C++编译器为编译器需要合成Default Constructor的4种情况。

    1,Class A内含Class B对象,Class A没有Default Constructor时会在编译时合成Default Constructor

        在编译期间这个Default Constructor会插入调用Class B的Default Constructor的代码 ,如:    

     1 class  B{
     2 public :
     3     B(){}
     4 };
     5 
     6 class A
     7 {
     8 public:                                                                                                                 
     9     B bb ;
    10     /*
    11     A()
    12     {
    13        bb.B::B();//合成可以调用bb的构造函数的代码
    14     }
    15     */
    16 };

    2,派生类的基类带有默认构造函数,而派生类无显示默认构造函数,编译器会合成派生类的默认构造函数并插入调用按声明顺序的基类的构造函数。

    3,当类带有virtual function时,无显示构造函数,会合成默认构造函数。编译器会产生virtual table,里面是该class的virtual function的地址,并为每个实例化对象合成一个指向该virtual table的指针。

    4,菱形继承时,  

                          Base

                       /          

                    child1     child2

                                 /

                        Derived              child* virtual 继承 Base,Derived 没有显示构造函数时,编译器会为Derived合成默认构造函数。会产生一个指向Base的指针。

    * 并不是每个没有显示构造函数的类编译器都会为其合成默认构造函数,只有当默认构造函数有一定用处时,才会为编译所需合成Default Constructor

    * 编译器合成的默认构造函数只为有用而合成,对于class 的 data member不会初始化,初始化工作只是程序员的事情。

  • 相关阅读:
    33、springboot——springboot整合RabbitMQ(1)②
    33、springboot——消息之JMS,AMQP简介①
    32、springboot——缓存之整合Redis
    Redis学习——2、RDB的简单相关配置及测试
    Redis学习——1、CentOS7中安装redis以及一些基本配置
    CentOS7查看及开放端口
    moment
    flex兼容性
    caniuse使用
    混合整数线性规划,图的最大流,图的匹配,求解
  • 原文地址:https://www.cnblogs.com/dot-dot-123/p/4103312.html
Copyright © 2011-2022 走看看