C++ では、すべてのオブジェクトに VPTR がありますが、クラスごとに VTABLE は 1 つだけです。VPTR がすべてのオブジェクトに含まれているのはなぜですか? 重複じゃない?
5 に答える
3
実行時の型情報がないと、オブジェクトがどのクラスに属しているかわかりません。そのため、メソッドを呼び出すには、クラス情報を保存し、それを使用して呼び出す正しい vtable を検索する必要があります。すべてのオブジェクトにポインタを配置する方が簡単 (かつ直接的) です。
于 2013-05-23T11:02:02.180 に答える
3
メモリ内の C++ オブジェクトのインスタンスは、他にどのように VTABLE を参照しますか? ただし、VPTR-VTABLE はコンパイラ固有の実装であり、C++ 標準はそれについて何も述べていません。通常、これはポリモーフィック クラスのインスタンスの最初の (隠し) メンバーです。
このような非表示のメンバーを持つと、C++ メモリ モデルが C と互換性がなくなるため、代償が伴います。これはオーバーヘッドであることに同意しますが、メモリ内の C++ オブジェクトのインスタンスから VTABLE を参照する他の (より良い) 方法はありません。
于 2013-05-23T10:59:29.997 に答える
1
そのポインターは、オブジェクトの型を識別する唯一の方法です。各オブジェクトに 1 つ必要です。
于 2013-05-23T11:01:09.333 に答える