飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1785|回复: 0

[C/C++] 虚表三两事(继承时的构造和析构顺序)

[复制链接]

该用户从未签到

发表于 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
// 若为虚函数,则必定在虚表中调用
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表