2007-11-07から1日間の記事一覧

swap には無送出保証の例外安全性が必要

『代入演算子の定石』では、swap には無送出保証の例外安全性が必要だと書いた。これに対して、「これなら原子性保証だけで十分なのでは?」という疑問が湧くかもしれない。ちなみに、こういうコード: some_class& operator = (const some_class& another) { …

代入演算子の定石

代入演算子を実装しなければならない場合は、以下のようにする。 class some_class { public: some_class& operator = (const some_class& another) { some_class tmp_(another); swap(tmp_); return *this; } void swap(some_class& another) throw (); }; …

代入演算子を書かなければならないとき

C++ の場合、特別な理由がない限り、クラスはコピー可能にする。この辺りは、java.lang.Cloneable の位置付けとは全然違うので、Java 慣れしてる人は注意が必要。 代入演算子を宣言しなかった場合、コンパイラが自動的に生成してくれる。これは、以下のよう…

3種類の例外安全性

関数の例外安全性には、以下の3種類がある。 資源解放保証((「資源解放保証」「原子性保証」「無送出保証」っていう言葉は bold;">いま勝手に作りました、すいません。Exceptional C++ などでは「弱い保証」「強い保証」「投げない保証」と呼ばれていますが…