当前位置: 网站首页 > 开发语言 > C/C++

《深度探索C++对象模型》读书笔记(4)

时间:1970-1-1 08:33:31来源: C/C++作者:admin 点击:2次 字体 [ С]

this += sizeof(base1);
Derived::~Derived(this);

   Thunk技术允许virtual table slot继续内含一个简单的指针,slot中的地址可以直接指向virtual function,也可以指向一个相关的thunk.于是,对于那些不需要调整this指针的virtual function而言,也就不需要承载效率上的额外负担。

   (2)由于两种不同的可能:

   (a)经由derived class(或第一个base class)调用;

   (b)经由第二个(或其后继)base class调用,同一函数在virtual table中可能需要多笔对应的slot;

 Base1 *pbase1 = new Derived;
Base2 *pbase2 = new Derived;

delete pbase1;
delete pbase2;

   虽然两个delete操作导致相同的Derived destructor,但它们需要两个不同的virtual table slots:

   (a)pbase1不需要调整this指针,其virtual table slot需放置真正的destructor地址

   (b)pbase2需要调整this指针,其virtual table slot需要相关的thunk地址

   具体的解决方法是:

发表评论
验证码:
最新评论
相关文章
最热文章