vfptr和vbptr
注:
由于这篇文章主要是讲vfptr和vbptr, 所以里面不带虚函数或没有虚继承的都不会涉及
vfptr:虚函数指针
vbptr:虚基类指针
1. 普通继承(virtual)
#include <iostream>
using namespace std;
class A {
public:
virtual void function1() {
;
}
private:
int data1 = 1;
};
class B {
public:
virtual void function2() {
;
}
private:
int data2 = 2;
};
class C :public A, public B {
};
int main() {
return 0;
}
让我们来看一下上面这段代码中C的内存布局
注:
VS2019中可以使用如下的命令查看指定类的内存布局:
cl -d1reportSingleClassLayoutC test.cpp
其中, C是类名, test.cpp是这个源文件的名称
C的内存布局如下:
class C size(16):
+---
0 | +--- (base class A)
0 | | {vfptr}
4 | | data1
| +---
8 | +--- (base class B)
8 | | {v