「主に意見に基づく」または「広すぎる」とは思われません。代入演算子のオーバーロードのアプリケーション例
代入演算子のオーバーロードが解決策を提供するいくつかの問題の例を教えてください。
私は、特に驚くべき陰的な行動と「煙と鏡」でいっぱいのプログラムがあるという否定的な意味を考慮して、まだ役に立つとは思わないと思います。
「主に意見に基づく」または「広すぎる」とは思われません。代入演算子のオーバーロードのアプリケーション例
代入演算子のオーバーロードが解決策を提供するいくつかの問題の例を教えてください。
私は、特に驚くべき陰的な行動と「煙と鏡」でいっぱいのプログラムがあるという否定的な意味を考慮して、まだ役に立つとは思わないと思います。
例:
struct X
{
int *p;
X(): p{new int[42]}
~X() { delete p; }
};
あなたは
X x, y;
x = y;
をすれば何が起こるのだろうか?デフォルトの代入演算子は生ポインタをコピーし、デストラクタによって同じポインタを2回削除します。x
とy
です。実際には、ここでもコピーコンストラクタを宣言してください(スマートポインタを使用する方が良いでしょう)。 (RHSがprvalueある場合やelided)
X x = some_obj;
にコピーコンストラクタが呼び出されることに注意してください。あなたはoperator=
は(Javaの例とは対照的に)すべてに存在するかどうかを尋ねる場合は
x = some_other_obj; // x is already constructed here
を言うとき、代入演算子は、それはおそらく、個人の好みの問題だ、唯一後建設を起動します。
標準ライブラリの型は何ですか? – imreal
代入演算子をオーバーロードする必要があるかどうか尋ねていますか?はいの場合、[Rule of three](https://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))をチェックしてください。 – Mahesh
@imreal確かに、例を説明できますか? – Alexander