2016-11-02 23 views
1

「主に意見に基づく」または「広すぎる」とは思われません。代入演算子のオーバーロードのアプリケーション例

代入演算子のオーバーロードが解決策を提供するいくつかの問題の例を教えてください。

私は、特に驚くべき陰的な行動と「煙と鏡」でいっぱいのプログラムがあるという否定的な意味を考慮して、まだ役に立つとは思わないと思います。

+0

標準ライブラリの型は何ですか? – imreal

+0

代入演算子をオーバーロードする必要があるかどうか尋ねていますか?はいの場合、[Rule of three](https://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))をチェックしてください。 – Mahesh

+0

@imreal確かに、例を説明できますか? – Alexander

答えて

3

例:

struct X 
{ 
    int *p; 
    X(): p{new int[42]} 
    ~X() { delete p; } 
}; 

あなたは

X x, y; 
x = y; 

をすれば何が起こるのだろうか?デフォルトの代入演算子は生ポインタをコピーし、デストラクタによって同じポインタを2回削除します。xyです。実際には、ここでもコピーコンストラクタを宣言してください(スマートポインタを使用する方が良いでしょう)。 (RHSがprvalueある場合やelided

X x = some_obj; 

にコピーコンストラクタが呼び出されることに注意してください。あなたはoperator=は(Javaの例とは対照的に)すべてに存在するかどうかを尋ねる場合は

x = some_other_obj; // x is already constructed here 

を言うとき、代入演算子は、それはおそらく、個人の好みの問題だ、唯一建設を起動します。

+0

私は参照してください。コピーコンストラクタが呼び出されてから代入演算子が呼び出されるまでのこの区別は、私にとってそれをクリアしたものです。 – Alexander

+0

@AlexanderMomchliov喜んでそれは助け! – vsoftco

関連する問題