zoukankan      html  css  js  c++  java
  • C++对象模型(四):class成员初始化列表(Member Initialization List)

    本文是Inside C++ Object Model Chapter 2 部分的读书笔记。

    编译器如何处理初始化成员列表的。

    下列情况中,必须要使用member initialization list进行data member 的初始化:

    1) 当初始化一个reference member。

    2) 当初始化一个const member。

    3) 当调用一个base class 的constructor,而他拥有一组参数的时候。

    4) 调用一个member class 的constructor ,而他有一组参数。

            

    编译器会一一操作初始化列表的成员,以适当的顺序在class的constructor中插入初始化操作,并且保证它们都发生在任何explicit user code 之前。

    这里总的需要留意两点:

    第一个:member object的初始化,最好放到初始化列表里面。若放置于构造器中,则会产生临时的object0,初始化之,在做赋值运算给object,然后object0自行销毁,期间耗时耗力。若置于初始化列表,则编译器会在构造函数中,user code之前,调用object的构造函数,予以初始化。

          

            第二个:初始化列表的初始化次序。初始化次序和member在类中的声明次序一致。相互关联的member,需要十分留意初始化列表中,其中依赖的次序。解决的办法:把其中一部分使用初始化列表初始化,而另一部分放置到构造函数中使用user code予以表达,这样即便次序存在依赖,也会只“先执行合成的,再执行user的code”。


    总结:

    编译器会对initialization list一一处理并且可能重新排序:按照members的声明顺序。它会安插一些代码到constructor内,并且在explicit user code之前

  • 相关阅读:
    [转]一致性hash算法
    [转]算法的时间复杂度和空间复杂度详解
    [转]B树(多向平衡查找树)详解
    spring中ApplicationContextAware接口描述
    [转]web.xml中<url-pattern>详解
    [转]linux中vim命令
    [转]Java GC的原理
    [转]浅谈UML的概念和模型之UML九种图
    Jmeter做读取csv接口测试
    IDLE崩溃:IDLE's subprocess didn't make connection. Either IDLE can't start a...
  • 原文地址:https://www.cnblogs.com/anzhsoft/p/3602987.html
Copyright © 2011-2022 走看看