条項11:operator=での自己付与の処理

1190 ワード

『Effective C++中国語版第三版』読書ノート
**条項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;
}

覚えておいてください:
  • は、オブジェクトが自己付与されたときにoperator=が良好な動作を行うことを保証します.テクノロジーには、「ソース・オブジェクト」と「ターゲット・オブジェクト」のアドレスの比較、周到な文の順序、copy-and-swapが含まれます.
  • は、いずれかの関数が1つ以上のオブジェクトを操作し、複数のオブジェクトが同じオブジェクトである場合でも、その動作が正しいことを決定する.