11

はい、知っています * はポインターです。それは私が話していることではありません。私のプログラムの 1 つで、ブレークポイントが設定されていて、autos に__vfptrvalueの変数があることに気付きました0x000007feed210a00

ただし、タイプの下では、*とだけ言って、それだけです。私のプログラムの他のすべてのポインターには、またはunsigned char*のような型がありました。ポインターは特定のクラスまたはデータ型に直接関連付けられているため、これらは理にかなっています。しかし、私は * がそうである可能性があることを知りません。本当に単純なポインター型だけですか?some::namespace::Frame*int*

編集: Visual Studio 2010 を使用しています。

4

2 に答える 2

11

__vfptr仮想メソッド テーブルが含まれており、継承での動的バインディングを可能にする情報が含まれています。

その中の情報には、解決する関数ポインターvirtual functionsや、クラスとその親に関する情報などが含まれます。

于 2013-02-01T14:26:36.863 に答える
5

答えは明らかに実装に依存し、正式にはデバッガーに関係し、C++には関係しません。ただし、実際には、の一部のバリアント_vptrは、多かれ少なかれ標準(通常の意味で、正式な標準で定義されているという意味ではない)の名前であり_vtable、これには、に必要なあらゆる種類の情報が含まれています。仮想関数とRTTIの解像度。つまり、_vptrはポインタ、オフセット、および他の多くのさまざまなもののテーブルへのポインタです。デバッガーはおそらく、このターゲットに名前を付けたり、その構造を説明したりする必要を回避しているだけです。

于 2013-02-01T14:28:55.627 に答える