杂记——《Inside The C++ Object Model》之四

  1. 每一个nonstatic data member的offset在编译期即可获得,即使它属于base class
  2. 通过对象和通过对像指针对于data member的存取操作,当data member是一个struct member,class member,单一继承、多重继承的情况完全一样,当data member是一个来自virtual base class的member的时候,则存在差异
  3. static data member存放在数据区,并不算作class的大小的组成部分
  4. C++语言保证 出现在derived class的base class subobject有其完整原样性
  5. static member function
    • 不能是const virtual 和volatile
    • 不能直接存取class中的nonstatic member
    • 不需经由class object调用

  6. virtual base class constructor 被调用的时机:只有当一个完整的class object被定义出来,它才会被调用;如果object只是某个完整object的subobject,它就不会被调用
  7. 临时性对象被摧毁的时机
    • 应该是对完整表达式求值过程中的最后一个步骤,该完整表达式造成临时对象的产生。所谓完整表达式,是指被涵括的表达式中最外围的那个. [p273]
    • 凡是含有表达式执行结果的临时性对象,应该保存到object 的初始化操作完成为止。[P274]
    • 如果一个临时性对象被绑定于一个reference,对象将残留,直到被初始化之reference的生命结束,或直到临时对象的生命范畴结束——视哪一种情况先到而定。[p275]
  8. 面向对象设计所需的多态性质,需要通过 pointer 或者 reference 才能体现。
  9. 转型(Cast)是一种编译器指令,大部分情况下它并不改变一个指针所含的地址它只影响“被指出之内存的大小和其内容”的解释方式。void* 指针只能够含有一个地址,而不能通过它操作所指的对象。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值