“深度探索c++对象模型”第五章

本文深入探讨了C++中的纯虚函数特性,包括它们可以不被实现、静态调用以及在构造过程中的特殊行为。同时,阐述了构造函数的执行顺序,确保对象从基类到自身逐步构建,并分析了在基类构造中调用virtual函数的机制。此外,还提及了当类包含析构函数或基类有析构函数时,编译器会自动生成析构函数,且析构函数的调用顺序与构造函数相反。
摘要由CSDN通过智能技术生成
  1. 纯虚函数,这真是令人难以言表啊。

纯虚函数得重新认识:a)编译器允许不实现 b) 实现了也不算错 c) 可以静态调用 d)不能多态调用

  1. 构造函数里可能依次发生的事:

  • 基类构造函数(不管是否在初始化列表中)

  • 设置vptr

  • 如果类:没有在初始化列表但有默认构造函数,调用该构造函数

  • 构造初始化列表指定的对象

这个顺序保证在构造过程中,对象先是一个根基类,然后是第二个基类,一直到当前对象自己。

  1. 基类构造函数中调用virtual函数,会执行自身的virtual函数。这是因为那面的调用顺序。

  1. 这样写有问题:

class B {

public:

B(int) {}

virtual int F() = 0;

};

class A {

public:

A() : B(F()) {

}

virtual int F() {

return 1;

}

};

按规定,F()调用应该是A::F(),但是B在构造在A的vptr设置之前。

  1. 类的成员变量或基类有析构函数时,编译器会自动合成一个析构函数。

  1. 析构函数里的调用顺序和构造函数里的正好相反。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值