描述:
如:
void CCmdTarget::EnableAggregation()
{
// construct an CInnerUnknown just to get to the vtable
CInnerUnknown innerUnknown;
// copy the vtable & make sure initialized
ASSERT(sizeof(m_xInnerUnknown) == sizeof(CInnerUnknown));
m_xInnerUnknown = *(DWORD*)&innerUnknown;
}
象这里的 m_xInnerUnknown = *(DWORD*)&innerUnknown;
不懂 请指教 谢谢
解决方案1:
这个没研究过,也不需要深究,但应该是在数据段。
这要知道类经过编译后,数据部分和函数部分已经分离了。
vtable就是一组指向virtual函数的指针。
请读一些关于COM的基础书,和C++编程思想等C++基础书,就知道vtable有什么用了。
一般来说,接口就是一组函数数组,得到vtable,就相当于得到了这组函数数组的首指针,也就是接口指针了。
类可以理解为一组数据(相当于原来的数据结构,不同的实例对象占用不同的内存)加上一堆函数(所有实例共享这组函数代码,调用成员函数实际上还传送了this指针作为函数的第1个参数),实例没了,可是函数不会丢的。