虚表三两事(继承时的构造和析构顺序)
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]