18

コンテナクラスを書きたい。このコンテナーには、2 つの特殊化を持つ挿入メソッドがあります。最初に、コピー コンストラクターを使用して、あるコンテナーから別のコンテナー要素にデータをコピーします。コピー コンストラクターが例外をスローした場合、何も起こらないようにコンテナーへのすべての変更を元に戻します。

2 番目の特殊化ではムーブ コンストラクターが使用されますが、ここで複雑になります。要素ごとにあるコンテナから別のコンテナ要素にアイテムを移動すると、移動コンストラクターが例外をスローする可能性があります。これが発生すると、一部の要素が移動され、他の要素が元の場所にとどまると、非常に厄介な状態になります。要素を元に戻そうとすると、別の例外が発生する可能性があります。

このようなものを例外安全な方法で書くことは可能ですか、または例外安全性と移動セマンティクスは相互に排他的ですか?

4

2 に答える 2

1

これを行う 1 つの方法は、コンストラクターの委任を使用することです。非委任コンストラクター (おそらく引数なしで、メンバーをデフォルトに設定するコンストラクター) が終了し、委任コンストラクターがスローした場合、標準では、ローカル状態が削除されると述べています。これで漏れません。私は今日、この講演でこれを学びました。

ところで、STL がまだ設定していないコンテナのタイプを実装していますか?

于 2013-10-25T09:27:22.710 に答える