#include <iostream>
using namespace std;
class A {
public:
void print() {
printf("A\n");
}
protected:
private:
int a;
};
class A2 {
public:
virtual void print() {
printf("A\n");
}
protected:
private:
int a;
};
/*
对象中的VPTR指针什么时候被初始化?
对象在创建的时,由编译器对VPTR指针进行初始化
只有当对象的构造完全结束后VPTR的指向才最终确定
父类对象的VPTR指向父类虚函数表
子类对象的VPTR指向子类虚函数表
*/
void main() {
printf("sizeof(A):%d\n", sizeof(A)); // sizeof(A) : 4
printf("sizeof(A2):%d\n", sizeof(A2)); // sizeof(A2) : 8 // 多出的4个字节是vptr指针
system("pause");
}
C++证明vptr指针的存在的demo
最新推荐文章于 2025-12-09 11:28:31 发布
本文探讨了C++中对象构造时VPTR指针的初始化过程,以A和其派生类A2为例,展示了虚函数表的使用和大小变化。重点讲解了基类和子类对象的VPTR指向及其在不同阶段的状态。
1056

被折叠的 条评论
为什么被折叠?



