問題タブ [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.

0 投票する
6 に答える
18819 参照

c++ - メモリ内の仮想テーブルのレイアウト?

仮想テーブルはどのようにメモリに格納されますか? 彼らのレイアウト?

例えば

クラス A とクラス B の仮想テーブルのメモリ内でのレイアウトはどのようになりますか?

0 投票する
4 に答える
2692 参照

c++ - C++ 継承/VTable に関する質問

更新: デストラクタの例を単純なメソッド呼び出しの例に置き換えました。

やあ、

次のコードがある場合:

  1. B に VTable はありますか? B には仮想関数はありませんが、b::func0() から a::func0() を呼び出します
  2. func1 は VTable に存在しますか? 仮想ではありません。
  3. func2 は VTable に存在しますか?
  4. aa::func0() 呼び出しが b::func0() にない場合、上記の答えは異なりますか?

ありがとう

0 投票する
11 に答える
608 参照

c++ - C ++の継承メカニズムが不透明なのはなぜですか?

たとえば、vtableを調べるための言語サポートがないのはなぜですか?メンバー関数を新しいものに置き換えられないのはなぜですか?そのような機能を有効に活用する方法があると直感しています。

私がそのようなことをすることを可能にする他の言語はありますか?

0 投票する
3 に答える
4170 参照

c++ - cppunit と xcode プロジェクトの vtable の問題

zxing iphone プロジェクトをビルドし、cppunit-1.12.1 で作成されたテスト スイートを実行しようとしています。プロジェクト内に cppunit-1.12.1 コードをコピーし、アクティブな SDK を 10.5 に変更すると、cppunit および zxingcore ターゲットをビルドできますが、zxingcore-tests ターゲットをビルドしようとすると、次のエラーが発生します。これは vtables に関連しているようで、ライブラリのアーキテクチャ タイプに関係する奇妙な警告が表示されます。

基本的に、すべての行の前に > を挿入することなくフォーマットをエスケープすることにより、これをフォーマットする良い方法はありますか? <pre>プレビューではうまく機能するタグを使用しましたが、最終的なレンダリングでは機能しませんでした。フォーマットを尊重せず、テキストを切り取っていませんでした。誰かから提案があり次第、フォーマットを変更します。

....many more of these warnings...

そして今、エラー

0 投票する
6 に答える
2092 参照

c++ - 仮想デストラクタと Vtable の間に関係はありますか

仮想関数を作成すると、そのクラスのオブジェクトに vtable が追加されます。仮想デストラクタにも当てはまりますか?デストラクタの仮想性を実装するために使用される vtable

0 投票する
6 に答える
6404 参照

c++ - 仮想ポインタのサイズ - C++

C++の仮想テーブルの仮想ポインタ(VPTR)のサイズは? また、これは宿題の質問ではありません... C ++の本を読んでいるときに頭に浮かんだ質問です。

0 投票する
4 に答える
317 参照

c++ - クラス(vtables)のC ++別のコンパイラ?

多重継承を許可しない 1 つのコンパイラでクラス A をコンパイルし、それをサポートするクラス B (およびクラス A から派生したクラス B) をコンパイルすると、どのような結果になるのか疑問に思っていました。

リンクの手順がよくわかりません...両方を併用することはできますか?この状況で vtables を使用して別のコンパイラを使用することには、どのような欠点がありますか? クラス B を使用するコードが適切に機能することは不可能でしょうか?

ありがとう。

0 投票する
5 に答える
48182 参照

c++ - シンボル「vtable for ...」および「typeinfo for ...」は未定義ですか?

ほぼ最終ステップですが、まだ奇妙なエラーがいくつかあります....

vtable と typeinfo の意味は何ですか?

0 投票する
7 に答える
897 参照

c++ - 仮想テーブルは未定義です

私はいくつかのコードを書きましたが、それをコンパイルすることができません:

これは私がg++から得たものです:

この質問は、宣言の循環依存に基づいています

0 投票する
2 に答える
3120 参照

c++ - EXE を DLL、ローカル vftable としてロードする

test.exe通常はスタンドアロン アプリケーションとして使用されるという名前の exe があります。この exe を別のアプリケーション app.exe 内のモジュール (dll) として使用したいと考えています。

test.exe のコードは、次のような非常に単純なことを行います。

どこsomeMethod()が virtual で、MyClass には virtual d'tor があります。
doTest()は test.exe からエクスポートされ、test.lib という名前のライブラリが作成され
ます。app.exe はこのライブラリとリンクされ、起動時に test.exe を静的にロードします。

test.exe をスタンドアロンで実行しているときは問題なく動作しますが、app.exe 内からロードして実行しているときはクラッシュします。
デバッガーでコードにステップ インすると、仮想メソッドの呼び出しでクラッシュが発生していることが明らかになりました。vftable がどういうわけか悪くなることがわかりました。

いくつかの調査の後、MyClass のコンストラクター内のコードが実行されている場合、vftable は 1 つのことですが、呼び出しがnew返されると、「ローカル vftable」と呼ばれる別のものに置き換えられることがわかりました。なぜこれが.

約 1 日デバッグした後、この「ローカル vftable」のポインターは、test.exe がスタンドアロンの場合とモジュールとしてロードされた場合の両方の場合で同じであることがわかりました。test.exe が別のアドレスに読み込まれるため、これは正しくありません...
この理論をテストするために、リンカ オプションの読み込みアドレスを、app.exe にあるときに test.exe が読み込まれるアドレスに変更しました。 、見よ、すべてが機能します。

明らかに、これは恒久的な解決策ではありません。次回、このランダムに選択されたアドレスが占有され、同じ問題が再び発生する可能性があるからです。

私の質問: この「ローカル vftable」が exe の静的読み込みアドレスに関連付けられているのはなぜですか? exeをモジュールとしてロードするのは悪いことですか? exe が静的アドレスにロードされていると想定するのはなぜですか?

参考までに、これはすべて MSVC 2008、Windows XP x64 で行われます。