5

がありauto_ptr<IFoo>IFooは純粋仮想メソッドのみのインターフェイスです。

また、セグメンテーション フォールト後のコア ファイルもあります。具体的なサブクラスがこの auto_ptr の背後にあることを知りたいと思っています。プロジェクトで動作するようdynamic_castに、RTTI は何らかの方法で利用できるはずだと思いますが、この情報にgdb?

私が得る出力は次のとおりです。

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

IBarポインターがまたはに属している場合、私が本当に知りたいことIBaz

助けてくれてありがとう!

4

1 に答える 1

6

ポインターが IBaror IBaz に属している場合、私が本当に知りたいこと

GDBはそれを教えてくれるはずです。を使用し(gdb) set print object onます。ドキュメンテーションはこちら

オブジェクトへのポインターを表示するときは、仮想関数テーブルを使用して、宣言された型ではなく、オブジェクトの実際の (派生) 型を識別します。仮想関数テーブルが必要であることに注意してください。この機能は、実行時の型識別を持つオブジェクトに対してのみ機能します。オブジェクトの宣言された型の単一の仮想メソッドで十分です。

アップデート:

IFoo* インターフェイスのみを出力します

これは、ポインターが実際に指している可能性があることを意味しますIFoo(たとえば、型があったIBarIBaz、既に破棄されているオブジェクト)。

dynamic_cast を使用することは意味しますか

はい、dynamic_castRTTI なしでは機能しません。を使用している場合はdynamic_castprint object on動作するはずです。

于 2012-10-17T14:28:13.850 に答える