デフォルトのコンストラクターとデストラクターの「=default」と「{}」の違いを理解する
「=default」と「{ }" は、デフォルトのコンストラクターとデストラクターでは交換可能に見えるかもしれませんが、非仮想デストラクターとデストラクターを考慮すると重要な違いがあります。 constructors.
非仮想デストラクター
非仮想デストラクターを処理する場合、「=default」構文が重要な役割を果たします。これは、自明なクラスの場合と同様にデストラクターを自動的に生成するようにコンパイラーに指示し、その型を自明とみなされます。一方、「{}」はユーザー提供のデストラクターを作成し、クラスの自明性ステータスを変更します。
非仮想コンストラクター
同様に、非仮想コンストラクター-virtual コンストラクターでは、「=default」を使用すると、コンパイラーがデフォルトのコンストラクターを生成し、自明性を維持できます。ただし、「{}」はユーザー提供のコンストラクターを指定しており、クラスの自明性に影響を与える可能性があります。
Trivial Classes
C 11 では、自明なクラスは、ユーザーが提供する特別なメンバー関数 (デフォルトのコンストラクター、コピー/移動コンストラクター/代入、デストラクター)。これらの関数は自動的に生成され、memcpy などの最適化を適用できます。
例
次のコードを考えてみましょう:
struct Trivial { int foo; }; struct NotTrivial { int foo; NotTrivial() {} }; struct Trivial2 { int foo; Trivial2() = default; };
結論
「=default」と「{}」は似ているように見えますが、使用するとクラスの自明性に重大な影響を与える可能性があります。非仮想デストラクターまたはコンストラクターを使用します。 「=default」はコンパイラのデフォルトの動作を保持し、自明性を維持しますが、「{}」はユーザー提供の関数を作成し、クラスの自明性ステータスを変更する可能性があります。
以上がC のデフォルトのコンストラクターとデストラクターの「=default」と「{}」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。