Aqu*_*irl 3 c++ virtual vtable
#include <iostream>
using namespace std;
class Z
{
public:
int a;
virtual void x () {}
};
class Y : public Z
{
public:
int a;
};
int main()
{
cout << "\nZ: " << sizeof (Z);
cout << "\nY: " << sizeof (Y);
}
Run Code Online (Sandbox Code Playgroud)
因为Y继承了Z,所以也会有虚表。美好的。但是,它没有任何虚函数,那么 Y 的虚表的内容是什么?
会空吗?
这完全取决于编译器。当我强制实例化Yand 时Z,g++ 4.4.5会为和生成两个不同的虚拟表Y,Z它们具有相同的大小。
两个表都指向相同x()但指向不同的typeinfo结构:
;=== Z's virtual table ===
_ZTV1Z:
.quad 0
.quad _ZTI1Z ; Z's type info
.quad _ZN1Z5xEv ; x()
_ZTI1Z:
; Z's type info (omitted for brevity)
;=== Y's virtual table ===
_ZTV1Y:
.quad 0
.quad _ZTI1Y ; Y's type info
.quad _ZN1Z5xEv ; x()
_ZTI1Y:
; Y's type info (omitted for brevity)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |