C++相談室 part31
■ このスレッドは過去ログ倉庫に格納されています
0337デフォルトの名無しさん
NGNG> その swapは例外を投げない保証をする必要ありますか?
ある。
>>330 のコードにおいて、swap が例外を発生させる場合を考えると、
>>322 の 2. を満たすためには、
operator= は以下のように直す必要があるが …
this_type & operator=( this_type const & rhs )
{
this_type temp( rhs );
... // this の状態を保存する。※1
try { temp.swap( *this ); }
catch( ... )
{
... // this の状態をもとにもどすコードを入れる ※2
throw;
}
return *this;
}
ここで、※ にどのようなコードを入れればいいかを考えるといい。
さらに、A.swap( B ) において、A のメンバの一部と、Bのメンバの1部だけが
入れ替わった状態で例外が発生すると、>>322 の 2. を満たせなくなる。
面倒なことをイロイロ考えなくてもいいように、swap は例外を出しちゃ駄目ってことになってるの。
■ このスレッドは過去ログ倉庫に格納されています