博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 构造和析构
阅读量:6346 次
发布时间:2019-06-22

本文共 747 字,大约阅读时间需要 2 分钟。

1、继承关系可认为,子类在父类的基础上进行。从这个角度讲,可把它认为穿衣脱衣的过程。穿衣是:先穿内衣,再穿外套。脱衣是:先脱外套,在脱内衣。构造是:先调用父类构造方法,再调用子类构造方法。析构是:先调用子类析构方法,再调用父类析构方法。

2、构造可分为两个步骤:初始化列表和方法内赋值。前者的使用场景是:初始化,即copy构造。后者的使用场景是:赋值,即copy赋值。

  a、对于类类型,如果没有在初始化列表中显式初始化,会进行隐式初始化,调用默认构造方法。因此,没有默认构造方法的类成员,必须显式初始化。

  b、对于基本类型,如果没有在初始化列表中显式初始化,不会进行隐式初始化。初始值依赖于对象的作用域:局部对象不被初始化,为0xcccccccc(并不是初始化为随机值),全局对象初始值为0。

  c、在初始化列表或者赋值阶段,都可以达到同样的效果。但是,对于类类型,如果在赋值阶段进行,相当于执行了一次copy构造(调用默认构造方法),一次copy赋值,因此,对于类类型,应该使用初始化列表,效率高。对于基本类型,因为没有隐式初始化,在初始化列表或者赋值阶段,都是一样的。

  d、但是有三种情况必须在初始化列表中进行:d1、没有默认构造方法的类类型,因为没有显示初始化,会进行隐式初始化,调用默认构造方法,导致编译出错;d2、const对象,必须初始化;d3、引用类型,必须初始化。

  e、类成员初始化的顺序,与初始化列表中的顺序无关,而与类定义中声明的顺序相关。

3、析构可认为分为两个步骤:自定义析构方法和合成析构方法。

  a、自定义析构方法:释放获取的资源。

  b、合成析构方法:按创建时的逆序撤销每个非static成员,如果成员是类类型,调用该成员的析构方法撤销对象。

转载地址:http://nqcla.baihongyu.com/

你可能感兴趣的文章
CSS3 Border-image
查看>>
php使用redis的GEO地理信息类型
查看>>
绘制顺序,深度缓冲区,模板缓冲区相关
查看>>
Python文件处理
查看>>
js无限轮播的写法
查看>>
洛谷P4769 冒泡排序
查看>>
固定思维的可怕(转)
查看>>
gitlab迁移升级
查看>>
c++函数重载
查看>>
2017.12.24
查看>>
Genymotion 模拟器连接不上(adb server version (40) doesn't match this client (39))
查看>>
spark查看stage和tasks信息
查看>>
day41-mysql七:视图、触发器、事务、存储过程、函数
查看>>
NIO与IO的区别
查看>>
用ElasticSearch存储日志
查看>>
网络文件共享服务之虚拟用户小实验
查看>>
单例的定义
查看>>
hadoop之JobTracker,TaskTracker,hadoop调度器
查看>>
apache2.2 虚拟主机配置详解
查看>>
C# winform调用类似按钮点击的事件时自带参数该怎么写
查看>>