zoukankan      html  css  js  c++  java
  • c++中的类(构造函数,析构函数的执行顺序)

    类对象的初始化顺序

    新对象的生成经历初始化阶段(初始化列表显式或者隐式的完成<这部分有点像java里面的初始化块>)——> 构造函数体赋值两个阶段

    1,类对象初始化的顺序(对于没有父类的成员)

    1)初始化阶段:该对象的类成员变量,const成员变量,引用成员变量进行显示初始化(由初始化列表决定),如果没有显式初始化,则进行隐式初始化(对于类成员,调用其默认构造函数)。因此对于没有默认构造函数的类成员变量、const成员变量,引用成员变量必须在初始化列表中进行显式初始化;对于内置变量或者复合类型的成员,如果对象再全局作用域,则进行初始化;如果在局部作用域,不进行初始化

    2)调用构造函数赋值:略

    2,对于含有父类的子类对象初始化

    1)调用基类的构造函数

    2)初始化阶段:子类对象的类成员变量,const成员变量,引用成员变量进行显示初始化(由初始化列表决定),如果没有显式初始化,则进行隐式初始化(对于类成员,调用其默认构造函数)。因此对于没有默认构造函数的类成员变量、const成员变量,引用成员变量必须在初始化列表中进行显式初始化。对于内置变量或者复合类型的成员,如果对象再全局作用域,则进行初始化;如果在局部作用域,不进行初始化

    3)调用自身的构造函数

    析构函数的调用顺序总是和构造函数相反,调用了多少次构造函数(包括复制构造函数),就需要调用多少次析构函数。注意复制构造函数在下列场合执行:

    复制构造函数

    1)根据同类型的对象初始化另一个对象(和赋值运算符的区别在于是否产生新对象)

    2)蒋对象作为实参,传递给一个函数,或者从函数返回时复制一个对象

    3)初始化容器或者数组元素(这个是在特定规则下,具体细节可以翻书)

  • 相关阅读:
    gitlab + gitlab-runner 实现项目的自动化部署测试环境与打包
    docker 部署 zookeeper 集群
    CSS 使用id属性的规则
    SimpleXML使用详解
    PHP通用分页类
    MYSQL远程连接速度慢的解决方法
    远程连接mysql出现1045错误的解决办法
    Bootstrap 元素居中设置
    PHP 时间戳
    html代码/如何做到有横线无竖线的表格/或横线有颜色/竖线没颜色
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3780771.html
Copyright © 2011-2022 走看看