なぜ GNU GCC は複数のデストラクターを生成するのですか?
C では、クラスにはそれぞれ特定の目的を持つ複数のデストラクターがある場合があります。
基本オブジェクト デストラクター (D2): オブジェクト自体、非仮想基本クラス、およびデータ メンバーを破棄します。
完全なオブジェクト デストラクター (D1) : さらに、仮想基本クラスを破棄します。
オブジェクト デストラクター (D0) の削除: 演算子 delete を呼び出してメモリを解放し、D1 と同じアクションを実行します。
複数のデストラクターの起源
コンパイル時に、GCC は仮想関数または仮想基本クラスを持つクラスに対してこれらのデストラクターを生成します。これは、Itanium アーキテクチャの C ABI (アプリケーション バイナリ インターフェイス) の要件です。
相違点と使用法
仮想インターフェイスがない場合、D2 と D1 は機能的に同等です。基本クラス。 GCC は、特定の最適化でシンボルを同じコードにエイリアスする場合があります。
単体テストへの影響
仮想メソッドまたは基本クラスを持つクラスの関数カバレッジ 100% を達成するには、破壊プロセス全体の適切なテストを確保するには、単体テストですべてのデストラクター (D2、D1、および D0) をカバーすることが重要です。
以上がGCC が C で複数のデストラクターを生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。