Nisy 发表于 2010-1-28 01:59:10

虚表三两事(继承时的构造和析构顺序)

class A
{
A();
~A();
};

class B: public A
{
B();
~B();
};

构造:
B() ==> 父类构造 ==> 初始化列表(俺类内定义)==> 为虚表赋值==> 执行代码区
析构:
~B() ==> 先赋虚表 ==> 然后执行代码 ==> 析构(类)成员(对象) ==> 析构父类

// 析构主要就是释放掉成员数据所申请的空间

new 先申请空间 然后调用构造
delete 将被重载 scalar deleting destructor
先调用析构 ~B()
然后再调用 operator delete (调用一下free函数)

new[] eh vector constructor iterator
delete[] 将被重载 vector deleting destructor
// 当delete时候 函数内部对析构函数的调用都为直接调用(显示调用)
这里将很复杂,请看前段书中所讲……

若析构函数为虚函数:
代码中没有delete[]时,虚表第一项为scalar deleting destructor
若代码中有delete[]时,虚表第一项为vector deleting destructor
// 若为虚函数,则必定在虚表中调用
页: [1]
查看完整版本: 虚表三两事(继承时的构造和析构顺序)