ホームページ > バックエンド開発 > C++ > C のデフォルトのコンストラクターとデストラクター: 「=default」と「{}」のどちらを使用する必要があるか?

C のデフォルトのコンストラクターとデストラクター: 「=default」と「{}」のどちらを使用する必要があるか?

Mary-Kate Olsen
リリース: 2024-12-06 09:14:10
オリジナル
945 人が閲覧しました

Default Constructors and Destructors in C  : When Should I Use

デフォルトのコンストラクターとデストラクターの "=default" と "{}" の違い

C では、デフォルトのコンストラクターとデストラクターは特別ですユーザーが明示的に定義しない場合、コンパイラによって自動的に生成されるメンバー関数。ただし、特定のシナリオでは、これらのデフォルトの動作をオーバーライドする必要が生じ、「=default」と「{}」が同じ機能を提供するかどうかという疑問が生じます。

Default Destructors

If a class には仮想デストラクターが必要ですが、実装はコンパイラで生成されたバージョンと同一であるため、「=default」構文を使用できます。これにより、コンパイラーは明示的な定義を必要とせずに仮想デストラクターを生成します。一方、空の定義「virtual ~Widget() {}」を使用すると、最小限の入力で同じ効果が得られます。

デフォルト コンストラクター

デストラクターとは異なり、「=default」の影響は次のとおりです。デフォルトのコンストラクターの「」は「{}」とは大きく異なります。 「Widget() =default」を使用すると、コンパイラーはクラス「Widget」のデフォルトのコンストラクターを自動的に生成します。この生成されたコンストラクターは、ユーザーによってコンストラクターが定義されていないかのように動作します。その結果、クラスを C 11 用語で言う「自明な型」にすることに貢献します。

逆に、「Widget() {}」はユーザー提供のデフォルト コンストラクターを作成し、クラスが自明であるとみなされるのを防ぎます。 C 11 は自明な型に制限を設け、効率的な初期化のために memcpy などの操作を許可します。

結論

仮想デストラクターの場合、「=default」と「{}」は同様に動作します。ただし、デフォルト コンストラクターの場合、「=default」はコンパイラ提供のデフォルト コンストラクターを生成しますが、「{}」はユーザー提供のデフォルト コンストラクターを作成するため、クラスの単純性に影響を与える可能性があります。デフォルトのコンストラクターの「=default」と「{}」のどちらを選択するかは、目的の動作とクラスの自明性への影響に基づいて選択する必要があります。

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

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