問題タブ [vtable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - vtableはメモリのどこに保存されますか?
vtableはメモリのどこに保存されますか?
c++ - C++ で vtable が作成されるのはいつですか?
コンパイラが仮想関数テーブルを作成するのはいつですか?
1) クラスに少なくとも 1 つの仮想関数が含まれている場合。
また
2) 直接の基本クラスに少なくとも 1 つの仮想関数が含まれている場合。
また
3) 階層の任意のレベルにある親クラスに少なくとも 1 つの仮想関数が含まれている場合。
これに関連する質問: C++ 階層で動的ディスパッチを放棄することは可能ですか?
たとえば、次の例を考えてみましょう。
V-Table を含むのはどのクラスですか?
B は f() を virtual として宣言していないので、クラス C は動的ポリモーフィズムを取得しますか?
c++ - new[] なしで Derived の配列を割り当てる: Base vtable へのポインタが悪い
基本的に、純粋な仮想クラス Base と、Base を継承する具象クラス Derived があります。次に、メモリの一部を割り当て、単純なキャストを介して Derived の配列として扱います。次に、= を使用して配列にデータを入力します。最後に、配列をループして、Base で宣言され、Derived で定義されている仮想メソッド GetIndex を呼び出そうとします。
問題は、Base の vtable へのポインターを読み取ろうとしてアクセス違反の例外が発生することです (Visual Studio のデバッグでは、これは __vfptr として表示され、常に 0xbaadf00d です)。
以下は、私が遭遇している問題の簡単な例です。
この動作は、HeapAlloc または malloc を介してメモリを割り当てる場合にのみ発生します。new[] を使用すると、正常に動作します。(また、cstor は前に 4 回呼び出されているため、出力は 4 5 6 7 です。)
c++ - どのような状況でvtableポインターがnull(または0x1)になる可能性がありますか?
現在、クラッシュログをデバッグしています。クラッシュは、(c ++-)オブジェクトのvtableポインターが0x1であるために発生しますが、クラッシュログからわかる限り、オブジェクトの残りの部分は問題ないようです。
仮想メソッドを呼び出そうとすると、プログラムがクラッシュします。
私の質問:どのような状況でvtableポインターがnullになる可能性がありますか?演算子deleteはvtableポインターをnullに設定しますか?
これは、gcc 4.0.1(Apple Inc.ビルド5493)を使用するOSXで発生します。
c++ - 仮想テーブルC++
「仮想関数が宣言されたクラスには仮想テーブルが存在する」と書いている人をたくさん読んでいます。
私の質問は、vtableは仮想関数を持つクラスにのみ存在するのか、それともそのクラスから派生したクラスにも存在するのかということです。
例えば
質問:派生したクラスのvtableがなかった場合、出力は「派生した印刷」ではなかったでしょう。したがって、IMOには、仮想関数が宣言されているクラスと、そのクラスから継承するクラスのvtableが存在します。これは正しいです ?
debugging - GCC での vtable リンカー エラーのデバッグ
ときどき GCC を使用すると、次のような不可解なエラーが発生します。
「クラス名の vtable」への未定義の参照
ライブラリの欠落が原因ではない場合、このあまり説明的ではないエラー メッセージが表示されると、コード ファイルを 1 行ずつ調べて、仮想関数の欠落している実装を見つける必要があります。不足している仮想関数、おそらくフラグなどをリンカに通知させる方法はありますか? それとも、私に言っているのかもしれませんが、私はそれが言っていることを理解していませんか?
c++ - 「vtablefixup」とはどういう意味ですか?
この「vtablefixup」という用語が使われているのを聞いたことがあります。どういう意味ですか?私はグーグルに尋ねることに成功しなかった。vtableが何であるかはすでに知っているので、定義する必要はありません。
c++ - 次のクラスに仮想テーブルがあるのはなぜですか?
次のようなダイヤモンドの継承状況があるとします。
最後の行では、あいまいさを理由にコンパイル エラーが発生します。私が理解しているように、問題は、コンパイラが D の vtbl に配置する foo を認識していないことですが、独自の仮想関数を定義していない場合、なぜ D の vtbl があるのでしょうか?
c++ - c++d3dフッキング-COMvtable
Frapsタイプのプログラムを作成しようとしています。失敗する場所についてはコメントを参照してください。
c# - 仮想メソッドテーブル
封印されたクラスについて説明するとき、「仮想関数テーブル」という用語が頻繁に言及されます。これは正確には何ですか?私は少し前にメソッドテーブルについて読みました(これの目的の目的も覚えていません)、そしてここでグーグル/検索はC++関連の結果をもたらします。
ありがとう