昔と違って、今のC++はnewがヌルポインタを返しません(代わりに例外投げます)。なので、このifの条件式は常に偽です。try‐catchに変えるか、new(std::nothrow)にしてください。
あれこれしてnewがNULLを返すような状態にしているなら話は別ですが、もちろんこのウンコードではそういうことはやっていません。
int* p = new int; if (p == NULL) { …… }
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
そうなのか、今はNULLを返さないのか…勉強になりました…汗
しらなかった
MSDNより。 http://msdn.microsoft.com/ja-jp/library/cc440197(v=vs.71).aspx
C++ 暗黒時代(1994 年ごろまで)は、大部分のコンパイラの operator new は NULL を返していました。
この動作は C の malloc に対する妥当な外挿でした。
幸いなことに、私たちが生きている時代はもっと進んでいて、コンパイラは強く、クラスは美しく、
そして標準ライブラリの operator new は例外をスローします。
1994年。今から8年ほど前までですか...。
Android NDK だと今でも普通に NULL 返すけどな。デフォルトで例外切られてたりしたし。
ところがどっこいGDI+のクラスではoperator newがオーバーロードされていて今でもNULLを返すから困る
AndroidNDKの場合はベースがEmbeddedC++だからとかなのでは? EmbeddedC++の言語仕様には例外含まれてないよ。名前空間すらない。
コメント投稿には、twitter認証が必要です。
Twitter認証
VC++6あたりだと、NULL返したりする。