条項11:operator=での自己付与の処理
1190 ワード
『Effective C++中国語版第三版』読書ノート
**条項11:operator=で自己付与を処理**
シナリオ1:
シナリオ2:
シナリオ3:
シナリオ4:
覚えておいてください:は、オブジェクトが自己付与されたときにoperator=が良好な動作を行うことを保証します.テクノロジーには、「ソース・オブジェクト」と「ターゲット・オブジェクト」のアドレスの比較、周到な文の順序、copy-and-swapが含まれます. は、いずれかの関数が1つ以上のオブジェクトを操作し、複数のオブジェクトが同じオブジェクトである場合でも、その動作が正しいことを決定する.
**条項11:operator=で自己付与を処理**
w = w;//
a[i] = a[j];//
*px = *py;//
シナリオ1:
Toby& Toby::operator=(const Toby& t)
{
if(this == &t) return *this; //< , , ,
delete pt;
pt = new pToby(*t.pt);
return *this;
}
シナリオ2:
Toby& Toby::operator=(const Toby& t)
{
pToby* pOld = pt; //< pt
pt = new pToby(*t.pt); //< pt *pt
delete pOld; //< pt
return *this;
}
シナリオ3:
class Toby{
...
void swap(Toby& t); //< *this t
...
};
Toby& Toby::operator=(const Toby& t)
{
Toby tmp(t); //< t
swap(tmp); //< *this
return *this;
}
シナリオ4:
Toby& Toby::operator=(Toby t) //< t , pass by value, *this
{
swap(t);
return *this;
}
覚えておいてください: