C++基类、派生类的初始化

C++基类、派生类的初始化

class base {
// ...
}

class derived : public base {
// ...
}

/////////////////////////////////////////////////////////////
derived A;

执行derived A时, 推测 基类和派生类的构造顺序如下:

  1. 在编译时分别确定好base及derived中vtbl(虚函数表)中的vptr(虚函数表指针)指向;
  2. 执行base类中的构造函数,此时derived没有生成,base中仍使用编译时base生成的vtbl;
  3. 执行derived类的构造函数,derived中使用编译时生成的derived中的vtbl,base生成的vtbl不再使用;
  4. 派生类初始化完成。

在base类初始化过程中,并没有derived类的信息,所以只能用自己scope中的虚函数来执行类的构造函数。由此也可以解释Effective C++中Item9(Never call virtual functions during construction or destruction)中的情况了,同时Item 9中也指出:

During base class construction, virtual functions never go down into derived classes. Instead, the object behaves as if it were of the base type.

在析构时情况也类似。

发布了12 篇原创文章 · 获赞 2 · 访问量 7467
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览