• 构造、析构、拷贝语意学


    1. 继承体系下的对象构造:

    (1)记录在member initialization list中的data members初始化操作会被放进constructor的函数本身,并以members的声明顺序为顺序;

    (2)如果有一个member并没有出现在member initialization lis中,当有一个default constructor,那么该default constructor必须被调用;

    (3)如果class object 有virtual table pointer,必须被设定初值,指向适当的virtual table;

    (4)在那之前,所有上一层的base class constructors必须被调用,以base class的声明顺序为顺序;

    (5)在那之前,所有的virtual base class constructors必须被调用,从左到右,从最深到最浅;

    拷贝构造的时候,要对自我拷贝进行筛选。

    vptr初始化操作何时进行?

    在base class constructors调用操作之后,但是在程序员供应的码或是member initialization list中所列的members初始化操作之前。

    constructor的执行算法如下:

    (1)在derived class constructor中,所有virtual base classes及上一层base class的constructors会被调用;

    (2)上述完成之后,对象的vptr(s)被初始化,指向相关的virtual table(s);

    (3)如果有member initialization list的话,将在constructor体内扩展开来;

    (4)执行程序员提供的码。

    在class的constructor的member initialization list中调用该class的一个虚拟函数,是安全的,因为vptr保证能够在member initialization list被扩展之前,由编译器正确设置好。

  • 相关阅读:
    集合
    Java异常处理机制
    LEACH分簇算法实现和能量控制算法实现
    利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率
    利用MATLAB仿真节点个数和节点通信半径与网络连通率的关系
    STM32液晶显示HT1621驱动原理及程序代码
    LMC7660即-5V产生电路
    LM431精密+3.3V产生电路
    锂电池充电电路、锂电池充电保护电路
    AMS1117降压电路
  • 原文地址:https://www.cnblogs.com/sssblog/p/13721199.html
Copyright © 2020-2023  润新知