[3320]
newの失敗の検出方法
もか
VC6はnew失敗時にはNULLを返すけど、すくなくともBCC551/MinGWでは std::bad_alloc 例外が発生します。
サクラエディタは、newに対しては「確保に失敗しない」ことを前提にしているのが現状ですが、
異なるコンパイラ間でも統一した方法でエラー検出ができないものでしょうか...
調べた限りでは、
NULLに統一したくてもBCC551ではnothrowが効かないことがある。
VC6では operator delete( size_t, nothrow_t& ); が未宣言。
VC7xではnewヘッダをインクルードするかしないかで動作が変わる。
set_new_handler()を使う場合もstaticなオブジェクトが、それより先にnewを実行するかもしれない。
結局、下記のソースみたく書かないといけないのでしょうか。
私はこの辺の仕様と実装を理解していないので、フォロー願います。
#include <new>
...
class Hoge *p = NULL;
try{
p = new Hoge();
}catch( std::bad_alloc ){
p = NULL;
}catch(...){
}
if( !p ){
// エラー、しかるべき対処を。
}