深度探索C++ 对象模型【第五章3】

1:总结一下拷贝赋值运算符

  • 较为复杂,不做细节讨论
  • 其在虚拟继承下行为不佳,需要加以小心的设计和使用说明
  • 建议尽可能不要允许虚基类函数的拷贝操作
  • 建议不要在虚基类函数中声明数据
2:Explict Initialization List 要注意和成员初始化列表相区别开来。
Point A = {1,2,3};//显示初始化列表
//与构造函数中的成员初始化列表有明显的区别


3:总结一点:继承体系的增加,和继承复杂度的增加以及虚拟继承的引入,都会使得对象的初始化和拷贝操作的时间成本有一定的增加。

4:如果class没有定义一个析构函数,那么只有在类内含有member object 或者是class 的基类有自己的析构函数的状态下,编译器才会自动合成出来一个析构函数。否则,析构函数不会被合成出来。(注意与构造函数与拷贝构造函数之间的区别,这次只有两种情况,也就是说,虚函数的存在,并不需要析构函数的参与

5:即使是定义了一个构造函数,也不应当理所当然的去定义或者合成一个析构函数,真正影响到它们存在的是是否需要该函数。

6:一个由程序员所定义的析构函数的扩展内容
  • 析构函数的本体首先被执行
  • 如果class有member object ,而该成员对象有析构函数,那么它们会以声明顺序相反的顺序被调用
  • 如果对象中含有vptr,现在会被重新设定,指向适当的基类的虚函数表
  • 如果有任何直接的(上一层)非虚基类有析构函数,它们会以声明顺序相反的顺序被调用
  • 如果有虚基类函数,且其有析构函数,如若讨论类为,最末端的派生类(most_derived class) ,则这些析构函数会以原来的构造顺序的相反顺序被调用
7:一个类对象的声明结束于析构函数开始执行时,由于每一个基类的析构函数轮番被调用,所以派生类实际上变成了一个完整的对象,随着基类析构函数的调用,类对象的大小逐渐减小,直到最后一个基类的析构函数调用(vptr的变化也随之改变)。



           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MISAYAONE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值