vtablesを使用するコンパイラの実装では、実行時に仮想関数のテーブルが変更されることはありますか?または、コンパイル時にvtableのみが満たされ、実行時に変更するアクションは実行されませんか?実行時のVtableの変更
答えて
実行時に変更される仮想テーブルを使用する多態性の実装では、C++ ABIについて認識していません。
仮想テーブルは通常、コードのプロパティ(クラス階層内のメンバー関数の互いのw.r.t位置の関係)を記述し、C++コードは実行時に変更されないため、あまり役に立ちません。
有用ではないため、無駄です。
vtablesは実行可能イメージのコードセクションまたはデータセクションに移動しますか? –
@KarolisM ilieška:どの実装ですか?なぜあなたは知る必要がありますか? –
具体的には、ARM Keilですが、これはgccアームにも当てはまります。 1.私はちょうど混乱しています。2.私は組込みシステムで作業しますが、時にはいくつかのセクションを配置する場所を知る必要があります。 –
短い答えはノーです。
派生クラスのオーバーライドされたメソッドが実行されないように、派生多相クラスのコンストラクタとデストラクタの実行中にオブジェクトの実際のvtableへのポインタが変更される派生クラスがまだ構築されていない/破壊されている間、基本クラスのコンストラクタ/デストラクタによって呼び出されます。
あなたがオブジェクトが実行時にクラスを変更したい場合、あなたは多くのオプションを持っている:
Objective-Cの(++)
手コード、独自のディスパッチメカニズム
python/javascriptなど。
(最適なオプション)はデザインを再考します。
変更するのはvtableではありません。それは破壊されているオブジェクトのvptrメンバーです! –
また、 'std :: function'は実行時に再割り当てすることができるので、これは別のオプションです –
@KerrekSBは固定されていますが、より良い表現があると確信しています。 –
- 1. 実行時にMPIで実行時にPEの数を変更
- 2. 実行時のシステムトレイアイコンのスタイルの変更
- 3. 実行時のAndroidウィジェットの変更マージン
- 4. bash:コマンド実行時のタブタイトルの変更
- 5. 実行時のDialogFragmentのサイズ変更
- 6. .nettiers実行時の接続の変更
- 7. 実行時のフォントの変更
- 8. 実行時のLaravelデータベースパラメータの変更
- 9. 変更実行時のコンパイルバージョンは
- 10. 実行時のアニメーションを変更する
- 11. スレッド変更の実行時間
- 12. 実行時の値を変更する
- 13. 実行時のテーマを変更する
- 14. 実行時のサイズ変更ボタン(wpf)
- 15. プロパティ変更時のPHP実行メソッド
- 16. Silverlightで実行時のボタンスタイルを変更
- 17. 実行時のレイアウトテンプレートを変更する
- 18. 実行時にアンドロイドで実行時にEditTextのテキストを変更する方法
- 19. 実行時にエレメントタイプを変更する
- 20. Jsliderが変更時にコードを実行
- 21. 実行時にテーマを変更する
- 22. 実行時にリピータインデックスを変更する
- 23. NLog - 変数更新(実行時)
- 24. Jquery:バインドロード+変更を同時に実行
- 25. 時系列モデルの実行時にインデックスを変更する
- 26. 実行時に毎回出力変更が実行される
- 27. 実行時にパラメータを変更するときの更新クエリ
- 28. 実行時にJList行の色を変更する
- 29. 実行時にListViewの行項目書体を変更する
- 30. 実行時にgridview行の色を変更する方法は?
どのような種類の実行時の変更が有用であると考えられていますか? –
@ Cheersandhth.-Alfもしそれが普通のC++プログラムであれば、それは愚かです。彼が(今も将来も)VMやInterperter/JITコンパイラのようなものを書かなければならないのであれば、私は彼の質問をすばやく捨てないだろう。 –
そのようなデザインを思いつくのは非常に難しいスレッドセーフなので、実行されていません。 –