デフォルトのコンストラクターとデストラクターの "=default" と "{}" の違い
C では、デフォルトのコンストラクターとデストラクターは特別ですユーザーが明示的に定義しない場合、コンパイラによって自動的に生成されるメンバー関数。ただし、特定のシナリオでは、これらのデフォルトの動作をオーバーライドする必要が生じ、「=default」と「{}」が同じ機能を提供するかどうかという疑問が生じます。
If a class には仮想デストラクターが必要ですが、実装はコンパイラで生成されたバージョンと同一であるため、「=default」構文を使用できます。これにより、コンパイラーは明示的な定義を必要とせずに仮想デストラクターを生成します。一方、空の定義「virtual ~Widget() {}」を使用すると、最小限の入力で同じ効果が得られます。
デストラクターとは異なり、「=default」の影響は次のとおりです。デフォルトのコンストラクターの「」は「{}」とは大きく異なります。 「Widget() =default」を使用すると、コンパイラーはクラス「Widget」のデフォルトのコンストラクターを自動的に生成します。この生成されたコンストラクターは、ユーザーによってコンストラクターが定義されていないかのように動作します。その結果、クラスを C 11 用語で言う「自明な型」にすることに貢献します。
逆に、「Widget() {}」はユーザー提供のデフォルト コンストラクターを作成し、クラスが自明であるとみなされるのを防ぎます。 C 11 は自明な型に制限を設け、効率的な初期化のために memcpy などの操作を許可します。
仮想デストラクターの場合、「=default」と「{}」は同様に動作します。ただし、デフォルト コンストラクターの場合、「=default」はコンパイラ提供のデフォルト コンストラクターを生成しますが、「{}」はユーザー提供のデフォルト コンストラクターを作成するため、クラスの単純性に影響を与える可能性があります。デフォルトのコンストラクターの「=default」と「{}」のどちらを選択するかは、目的の動作とクラスの自明性への影響に基づいて選択する必要があります。
以上がC のデフォルトのコンストラクターとデストラクター: 「=default」と「{}」のどちらを使用する必要があるか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。