阿龙的学习笔记---《深度探索C++对象模型》读书笔记(五)--- 构造、析构、拷贝语意学

  • 一个 pure virtual destructor 纯虚析构函数 需要被定义,因为编译器会在derived类中静态调用他。所以一般不要把虚析构函数声明为纯虚。
  • 不要把不会呗重写的函数声明为虚函数,因为效率上没有静态函数高,并且不能被inline所优化。
  • 虚函数在设计为const的时候,需要谨慎,因为你不知道derived class 会不会修改成员变量,所以建议是最好不要声明为const。

无继承情况下的构造

  • Plain Old Data (POD) POD 指的是这样一些数据类型:基本数据类型、指针、 union 、数组、构造函数是 trivial 的 struct 或者 class 。POD 用来表明 C++ 中与 C 相兼容的数据类型。自动生成的几个函数都是 trival 的,一些情况下,编译器则不会调用(可能因为调用了也没什么意义,拷贝也是逐位拷贝)。而如果你定义了默认构造函数,则会调用。
  • 在有虚函数的情况下,每个object 中会有虚指针,所以构造函数中会被编译器添加虚指针的部分。

vptr相关

  • 在一个构造函数中调用的 virtual function,都是这个类的,而不会有多态。比如一个derived类在构造中,会调用 base 类的构造函数,但是其中的虚函数没有多态性。所以一般不在构造函数中调用虚函数。因为在 base 的调用中,derived的部分还没有被初始化,vptr还只是base设置的vptr,所以没法调用派生类的虚函数。

后面的内容暂时搁置一下吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值