問題タブ [vptr]

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 投票する
3 に答える
5269 参照

c++ - vptr(vtableを指す)はいつポリモーフィッククラス用に初期化されますか?

これは「VTABLEがいつ作成されるか」についてではありません。。むしろ、VPTRをいつ初期化する必要がありますか?コンストラクターの最初/最後ですか、それともコンストラクターの前/後ですか?

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

c++ - C++ 派生ポリモーフィック クラス - vptr を含む Base のインスタンス全体が含まれていますか?

私たちが持っていると言う

では、メモリ内のクラスのサイズがそのメンバーの合計であると仮定すると (つまり、パディングや実際に発生する可能性のあることを無視して)、B インスタンスのサイズはどれくらいになるでしょうか? sizeof(A) + sizeof(int) + sizeof(vptr) ですか? または、B インスタンスは個人的な A インスタンスに A vptr を保持しないので、sizeof(b) は sizeof(int) + sizeof(int) + sizeof(vptr) になりますか?

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

c++ - vptr の解決

コンパイラーは、コンストラクターによって実行時に正確な VTABLE で初期化されるクラスのメンバー呼び出し VPTR を提供することを知っています。2つの質問があります

1) VPTR を保持するクラス。またはすべてのクラスが個別の VPTR を持っています。

2) 文を実行するときder d; 、VPTR は実行時にどのように解決されますか?

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

c++ - 破壊中にvptrは変化しますか?

この記事を見ていたら、「基本クラスのデストラクタに入ると、オブジェクトは基本クラスのオブジェクトになり、仮想関数、dynamic_castsなどのC++のすべての部分がそのように処理されます」と書かれています。これは、破壊中にvptrが変更されたことを意味しますか?それはどのように起こりますか?

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

c++ - 仮想テーブルポインタ(C ++)がオブジェクトに設定されるのはいつですか?

仮想関数を持つクラス、または仮想関数を持つクラスから派生したクラスの場合、コンパイラーは2つのことを実行することを知っています。まず、そのクラスの仮想テーブルを作成し、次に、オブジェクトのベース部分に仮想ポインター(vptr)を配置します。実行時に、このvptrが割り当てられ、オブジェクトがインスタンス化されると正しいvtableをポイントし始めます。

私の質問は、インスタンス化プロセスのどこでこのvptrが設定されるのかということです。このvptrの割り当ては、コンストラクターの前/後のオブジェクトのコンストラクター内で発生しますか?

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

c++ - 実行時に仮想ポインターを動的に変更する

では、純粋仮想関数を持つ基本クラスを継承する 2 つのクラスがあるとします。両方のクラスは、その関数の独自のバージョンを実装しますが、追加のメンバー変数を追加しないため、同じサイズになります。時々、プログラムの実行中に、すべてのデータをコピーせずに、あるクラスを別のクラスに変換したいことがあります。なので基本的には他のクラスの仮想テーブルを利用させたいと思っています。これを行うポータブルな方法はありますか?

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

c++ - 参照変数と継承

次のコード:

次の結果が得られます。

(VS2010でコンパイル)

vptrは割り当てによって変更されないと思います。それを再作成させる方法はありますか(Parentへのポインターを使用してnewを使用して割り当てる以外)?

ありがとう

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

c++ - アセンブリの演算子delete()がvptrポインタを削除するとき?

演算子delete()が呼び出されると、vptrは削除されます。

ただし、vptrポインターは非表示であり、そのメモリー構造を気にする必要はありません(さらに、コンパイラーごとに、動作方法について異なるシステムがあります)。

作成したオブジェクトのvptrがアセンブリで削除されるのはいつか知りたいのですが。

VS2010のアセンブルコード(void operator delete(void * pUserData))は次のとおりです。

前もって感謝します。:)

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

c++ - C++ プログラム内の仮想テーブルと仮想ポインターの数

以下のプログラムがあるとしましょう:

私の質問は、このプログラムを実行するvtablesと、いくつ作成されるのでしょうか?vptrs

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

c++ - 基本クラスの仮想継承と空のvtable

このコードがあります:

一部のクラスが仮想的に継承されると、Derivedクラスの空のvtableが作成されることを読みました。したがって、メモリレイアウトは次のようになります。

そしてそれは12バイトです。問題は、仮想メソッドがない場合、この空のvtableの目的は何であり、どのように使用されるのかということです。