【发布时间】:2008-11-19 16:18:59
【问题描述】:
假设一个人继承了一个复杂的代码库(在 Visual C++ 中,假设是 2003 年或更晚),并带有一个大而复杂的继承图。假设它很深,并且有很多虚函数,甚至可能还有多重继承。 (是的,有点维护噩梦)。任何将这个类层次结构重构为更合理的东西的尝试都需要知道每个类使用的每个虚函数的实现。
如果我们采用任意叶类 L1 - 它派生自基类 B1,而基类 B2 派生自基类 B2 等等 - 它显然会为该类提供一个 vtable,它将显示类似(伪 vtable)的内容:
L1::F1
B3::F2
B1::F3
L1::F4
etc.
...具体取决于哪些虚函数已被哪个类覆盖。
人们怎么能以类似的形式看到这样的 vtable?可以通过阅读代码手动重建它,但这容易出错且费力。据推测,在调试器中闯入类的对象可以允许您通过该类的 vtable 指针在 Watch 窗口中检查 vtable,但这是一个尴尬的解决方案,特别是如果您还想查看 L2 的 vtable, L3, ... LN。
DbgHelp.dll 是否提供了以编程方式检查 vtable 的工具(允许以任何需要的形式输出)?还是有其他方法?
【问题讨论】:
标签: c++ visual-c++ inheritance