質問

new(std::no_throw)を実行すると、失敗した場合にNULLへのポインタが設定されることを私は知っています。 また、通常のnewが失敗した場合、std::bad_alloc例外がスローされることも知っています。

通常のnewは、スローされた場合、NULLへのポインターも設定しますか?または、NULLブロックでcatch()に設定する必要がありますか?

役に立ちましたか?

解決

C ++では、不正なnewは例外をスローし(std :: nothrowを使用しない限り)、ポインターは割り当てられないため、new呼び出しが行われる前の状態になります。

ただし、この記事これは、質問で述べたように、失敗時にnewにnullを返すように強制することについて説明しています。

他のヒント

例外がスローされると、catchが例外を停止するまで、スタックが巻き戻されます(ローカルオブジェクトのデストラクタが実行されます)。ポインタをNULLに自動的に設定するものは何もありません。また、破壊者の1人がそうするのは不思議なことです。これは、不自然な例です。

通常、ポインタをNULLに設定する必要はありません。実際、多くの場合、それはできません。次のコードを使用してください: ジェネラコディセタグプレ

これらの12バイトの割り当てが失敗する可能性があります。例外は、std::stringのコンストラクターから返されます。その時点で、オブジェクトsは存在しなくなり、s._SomeInternalName内のポインターsも存在しなくなります。そのため、catchブロックでsを使用しようとすると、コンパイラはエラーを報告します。また、ポインタがもう存在しない場合は、明らかに0に設定することはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top