Inside the C++ Object Model 总结

1.C++ 虚函数的实现是为class安插一个vptr指向一个数组。数组第一项通常保存type_info。其他项为虚函数地址。或许还存在指向virtual base class的指针。

2.通过变量调用虚函数,不会带来运行期的额外成本。编译期间就确定了函数的地址。

3.在class struct中,同一access session下的数据总是连续存储在内存中。(static data和函数除外)。

4.当用父类的变量来保存子类的变量时,不管是调用父类的copy还是assign函数,都将对子类裁剪。产生新的父类。引用和指针则不会。因为他们都没有产生新的父类。

5.C++ 用于支持多态的方法

一组隐式的转化操作。

virtual function

dynamic_cast和type_id运算符

6.编译器总是有意图修改你的或者合成默认构造函数。以便满足编译器的需要。通常是将遗漏的成员变量逐一调用其默认构造函数以及调用父类的默认构造函数。成员的构造视其申明顺序。当类中申明了或者继承了至少一个virtual function,产生virtual function table,填入virtual function的地址。为class添加额外的vptr,指向virtual function table。编译器还会改写指针或者引用对虚函数的调用。

7.class 的=运算符如果产生了新的对象,则调用copy构造函数,否则调用assign函数。

8.必须在成员初始化列表中初始化

初始化一个引用

初始化一个常量

父类无默认构造函数

成员无默认构造函数

9.成员初始化表比构造函数里面赋值效率高.

10.使用指针访问成员的效率与是否是继承自虚基类有关。需要运行期决定。

 

转载于:https://www.cnblogs.com/like1/p/6877442.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值