5

OK、それで私はすべてコピーアンドスワップのイディオムで売られており、私はそれを実装する方法をほとんど知っていると思います。

ただし、またはコードベースはMFCのCStringクラスを文字列として使用するため、これは変更されません。

swapしなければならない(すべきか???)ので、私はできませ

std::swap(this->my_cstring, rhs.my_cstring);

これにより、スローされる可能性のある一時的なCStringオブジェクトが作成されます。(それに加えて、その非効率的です。)

だから私はどこに残っているのですか?トライキャッチを追加する必要がありますか?これ(非常にまれですが)のメモリ不足状態で例外を発生させ、スワップを失敗させることを実際に許可する必要がありますか?

CStringsの実装を見ると、スワッピングを可能にするメンバーまたは関数がないようです...

4

1 に答える 1

3

自己回答:

CStringを詳しく調べたところ、CStringは参照カウント文字列の実装であるため、std :: swapを介してスワップすることは、実際には「99%」例外安全であるように見えます。これは、参照カウントの増減だけが発生するためです。

IsLockedCStringオブジェクトの場合、常にコピーを実行するため、「99%」安全です。

于 2011-10-05T12:40:39.137 に答える