5

我有一个auto_ptr<IFoo>, whereIFoo是一个只有纯虚拟方法的接口。

我现在在分段错误之后也有一个核心文件,我真的很想知道这个 auto_ptr 背后的具体子类是什么。作为dynamic_cast项目中的工作,我认为 RTTI 必须以某种方式可用,但我不知道我将如何通过gdb

我得到的输出如下:

(gdb) print this->obj._M_ptr
$22 = (class martin::IFoo *) 0x7418

我真正想知道的是,如果指针属于 anIBar或 an IBaz

谢谢你的帮助!

4

1 回答 1

6

我真正想知道的是,指针是否属于 IBar 或 IBaz

GDB 应该可以告诉你。使用(gdb) set print object on. 文档在这里

显示指向对象的指针时,使用虚函数表识别对象的实际(派生)类型而不是声明的类型。注意虚函数表是必需的——这个特性只适用于具有运行时类型标识的对象;对象声明类型中的单个虚拟方法就足够了。

更新:

它只输出 IFoo* 接口

这可能意味着指针确实指向IFoo(例如,该类型的对象IBarIBaz已被破坏的对象)。

使用 dynamic_cast 是否意味着

是的,dynamic_cast没有 RTTI 就无法工作;如果您正在使用dynamic_castprint object on应该可以正常工作。

于 2012-10-17T14:28:13.850 回答