悪いコーディングと見なされる一般的な構造でcopyc'torの代わりに代入演算子を使用していますか?または、特定のデータ型に特別なc'torがある場合は、適切な代入演算子も必要であると広く想定されているため、問題ではありませんか?
たとえば、テンプレートとDATAデータを使用して、独自の汎用リンクリストを作成している場合。各ノード内のフィールド。したがって、問題は、リストコードのどこかで、2つのDATA変数間で代入演算子を使用できるかどうかです。
悪いコーディングと見なされる一般的な構造でcopyc'torの代わりに代入演算子を使用していますか?または、特定のデータ型に特別なc'torがある場合は、適切な代入演算子も必要であると広く想定されているため、問題ではありませんか?
たとえば、テンプレートとDATAデータを使用して、独自の汎用リンクリストを作成している場合。各ノード内のフィールド。したがって、問題は、リストコードのどこかで、2つのDATA変数間で代入演算子を使用できるかどうかです。
一般的な構造でコピー c'tor の代わりに代入演算子を使用すると、悪いコーディングと見なされますか?
質問は一般論なので、私の回答も一般論になります。
いいえ。代入演算子を使用すること自体は、悪いコーディングではありません。他のものと同様に、誤用されたり、誤って実装されたりする可能性がありますが、概念として、代入演算子を使用することに問題はありません。それが彼らの目的です。
たとえば、テンプレートと DATA データを使用して、独自の汎用リンク リストを作成している場合。各ノード内のフィールド。したがって、問題は、リスト コードのどこかで、2 つの DATA 変数の間で代入演算子を使用できるかどうかです。
この例では、どちらも使用せず、 を使用しますswap
。これはより高速で、例外に対して安全です。
using std::swap;
swap(old, new);
代入演算子を使用すると、最初にコピーが作成され、次にデストラクタが呼び出されます。
コピー コンストラクタを使用すると、2 つのデストラクタと 1 つのコピー コンストラクタが呼び出されます。
スワップを使用するswap
と、1 つのデストラクタが呼び出されます。swap
通常は安いです。
代入演算子とコピー コンストラクター、および同様の機能を持つ 2 つの異なるもの。それが悪い習慣と見なされるかどうかという問題に関しては、一般的にそうするのは悪い考えではありません。これが持つ利点は、プログラム内のほぼいつでもどこからでも呼び出すことができることです。コピー コンストラクターは通常、オブジェクトの初期化時にのみ呼び出されます。
代入演算子は、非常に危険な状況につながる場合があります。プログラマーは、自己割り当てなどの特定の条件に対してチェックする責任があります。ここで、リンクされたリストの場合、新しい割り当ての前にオブジェクトが保持していた以前のリストも破棄する必要があります。
これがあなたの聞きたいことであったことを願っています。