首先创建一个demo
//demo vptr.cpp #includeMinGWclass 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; }
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



