単一関数でコピー コンストラクターとコピー代入演算子の両方を処理できますか?
オブジェクト指向プログラミングでは、多くの場合、クラスはコピー コンストラクターとコピー代入演算子を必要とします。オブジェクトの適切なコピーを保証するためのコピー代入演算子。これらの関数には多くの類似点がありますが、戻り値の型が異なります。ここで疑問が生じます: コピー コンストラクターとコピー代入演算子の両方を処理するために共通の関数を使用できますか?
実装アプローチ
はい、主なメソッドが 2 つあります。これを達成するには:
1.コピー コンストラクターからコピー代入演算子を呼び出す (非推奨)
MyClass(const MyClass& other) { operator=(other); }
このアプローチは、複雑さが増し、自己代入と既存の状態の適切な処理に関連する潜在的な問題が発生するため、通常は推奨されません。
2.コピー アンド スワップ イディオム
より推奨されるアプローチは、コピー アンド スワップ イディオムです。
MyClass& operator=(const MyClass& other) { MyClass tmp(other); swap(tmp); return *this; }
このイディオムには、一時オブジェクトを作成し、目的の状態をコピーします。それから内部を現在のオブジェクトと交換します。このアプローチには、いくつかの利点があります。
注: これは重要です。スワップ関数が、コピー コンストラクターとコピー代入演算子。
結論
コピー コンストラクターとコピー代入演算子の戻り値の型は異なりますが、共通の関数を使用して両方を処理することができます。コピーアンドスワップのイディオム。このアプローチにより、実装が簡素化され、自己割り当ての安全性が保証され、強力な例外保証が提供されます。
以上が1 つの関数で C コピーの構築と代入の両方を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。