首先创建一个demo
//demo vptr.cpp
#include <iostream>
class Base {
public:
virtual void funcA()
{
std::cout << "Base::funcA" << std::endl;
}
virtual void funcB()
{
std::cout << "Base::funcB" << std::endl;
}
};
class A : public Base {
public:
virtual void funcA()
{
std::cout << "A::funcA" << std::endl;
}
void funcB()
{
std::cout << "A:funcB" << std::endl;
}
};
int main()
{
std::cout << "Base " << sizeof(Base) << " A " << sizeof(A) << std::endl;
return 0;
}
MinGW
g++ -fdump-class-hierarchy -fsyntax-only vptr.cpp
如果使用以上命令,出现报错:
cc1plus: error: unrecognized command line option ‘-fdump-class-hierarchy’
说明当前Linux的GCC版本较高,因为以上命令只支持GCC 7.X以下,高版本已被删除。
GCC 8.0以上的使用以下命令:
g++ -fdump-lang-class vptr.cpp
然后就会成功生成vptr.cpp.001l.class
文件,进行查看即可。
VS
可以直接在VS里,工具-命令行打开
cl -d1reportSingleClassLayout##classname #classname.cpp
##classname(拼接类名),#classname字符串化类名
比如这里可以看Base基类
cl /d1 reportSingleClassLayoutBase vptr.cpp