13

より効果的な C++で、Scott Meyers は言います

C++ は、例外としてスローされたオブジェクトがコピーされることを指定します。

次に、コピー コンストラクターが順番に例外をスローすると、std::terminateが呼び出されるので、これがすべての例外のコピー コンストラクターを宣言する正当な理由になるnoexceptと思います (また、ヒープからメモリを割り当てるオブジェクトをスローしないように、のようにstd::string)。

std::bad_allocしかし、GCC 4.7.1 に同梱されている標準ライブラリの実装では、とのコピー コンストラクタが定義されていないことに驚きましたstd::exception。彼らはそれらを定義すべきではありませんnoexceptか?

4

4 に答える 4

0

まあ、それを宣言するのは問題ありnoexceptませんが、例外をスローしないことを保証できる必要があります (移植可能なコードの場合は、すべての実装で!)。私が期待しているのは、標準的なものがそのように宣言されていない理由です。

コピー コンストラクター を宣言しても害がないことは明らかですnoexceptが、それを達成しようとするとかなり制限される可能性があります。

于 2014-02-08T10:23:10.603 に答える