您的位置:首页 > 编程语言 > C语言/C++

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

2016-08-25 15:10 344 查看

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

class base {
// ...
}

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

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


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

在编译时分别确定好base及derived中vtbl(虚函数表)中的vptr(虚函数表指针)指向;

执行base类中的构造函数,此时derived没有生成,base中仍使用编译时base生成的vtbl;

执行derived类的构造函数,derived中使用编译时生成的derived中的vtbl,base生成的vtbl不再使用;

派生类初始化完成。

在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.

在析构时情况也类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++