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地址
具体的解决方法是:
