vtordisp

C++ 固有

隠し vtordisp 構築/破棄ディスプレイスメント メンバーの追加を制御します。

#pragma vtordisp([push,] n)
#pragma vtordisp(pop)
#pragma vtordisp()
#pragma vtordisp([push,] {on | off})

パラメーター

  • push
    コンパイラの内部スタックの現在の設定を押して、vtordisp nに配置する新しい vtordisp を設定します。n が指定されていない場合、現在の vtordisp の設定は変更されません。

  • pop
    上のレコードをコンパイラの内部スタックから削除し、削除された値に vtordisp 設定を復元します。

  • n
    vtordisp の設定に新しい値を指定します。使用できる値は、/vd0、/vd1、および /vd2 コンパイラ オプションに対応する 0、1、または 2 です。詳細については、「/vd (ディスプレイスメントの無効化)」を参照してください。

  • on
    #pragma vtordisp(1) と同じ意味です。

  • off
    #pragma vtordisp(0) と同じ意味です。

解説

vtordisp のプラグマはコードにのみ適用される仮想基本使用することです。派生クラスが仮想基本クラスから継承し、仮想基本クラスへのポインターを使用して機能する派生クラスの呼び出しのコンストラクターまたはデストラクター仮想関数をオーバーライドする場合、コンパイラで仮想基本を持つクラスに vtordisp の追加の隠しフィールドになる場合があります。

vtordisp のプラグマは後続のクラス レイアウトに影響します。/vd0、/vd1、および /vd2 オプションは、完全なモジュールに対して同じ動作を指定します。0 か off を指定することは vtordisp の隠しメンバーを抑制します。クラスのコンストラクターとデストラクターは、this のポインターが指すオブジェクトの仮想関数を呼び出すという現象がない場合にのみ vtordisp をオフにします。

1 かを on、既定値は指定して、必要な vtordisp の隠しメンバーを有効にします。

2 を指定すると、仮想関数のすべての仮想基本の vtordisp の隠しメンバーを有効にします。vtordisp(2) は部分的構築されたオブジェクトの正しい dynamic_cast のパフォーマンスを確認して必要な場合があります。詳細については、「コンパイラの警告 (レベル 1) C4436」を参照してください。

#pragma vtordisp()は、引数なしで初期化時に、vtordisp 設定を復元します。

#pragma vtordisp(push, 2)
class GetReal : virtual public VBase { ... };
#pragma vtordisp(pop)

END C++ 固有

参照

関連項目

プラグマのディレクティブと __Pragma のキーワード