ホームページ > バックエンド開発 > C++ > C のデフォルトのコンストラクターとデストラクターの「=default」と「{}」の違いは何ですか?

C のデフォルトのコンストラクターとデストラクターの「=default」と「{}」の違いは何ですか?

Linda Hamilton
リリース: 2024-12-07 04:47:10
オリジナル
486 人が閲覧しました

What's the Difference Between

デフォルトのコンストラクターとデストラクターの「=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;
};
ログイン後にコピー
  • Trivial は、ユーザーが提供する特別なメンバーを持たないため、Trivial です。
  • NotTrivial は、ユーザー指定のデフォルト コンストラクターがあるため、自明ではありません。
  • Trivial2 は、「=default」とマークされたコンストラクターがあっても、コンパイラの呼び出しを引き続き呼び出すため、自明です。デフォルトのコンストラクター

結論

「=default」と「{}」は似ているように見えますが、使用するとクラスの自明性に重大な影響を与える可能性があります。非仮想デストラクターまたはコンストラクターを使用します。 「=default」はコンパイラのデフォルトの動作を保持し、自明性を維持しますが、「{}」はユーザー提供の関数を作成し、クラスの自明性ステータスを変更する可能性があります。

以上がC のデフォルトのコンストラクターとデストラクターの「=default」と「{}」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート