egtra 2012-08-02 16:09:37

[C++] newはヌルポインタを返しません。 このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

昔と違って、今のC++はnewがヌルポインタを返しません(代わりに例外投げます)。なので、このifの条件式は常に偽です。try‐catchに変えるか、new(std::nothrow)にしてください。

あれこれしてnewがNULLを返すような状態にしているなら話は別ですが、もちろんこのウンコードではそういうことはやっていません。

int* p = new int;
if (p == NULL) {
   ……
}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(10)

#1 kuma056 2012-08-14 05:43:52  

VC++6あたりだと、NULL返したりする。

#2 mikahosi 2012-08-14 06:29:39  

newが例外投げない時代もあったから、その名残でしょう。

#3 juangotoh 2012-08-14 17:37:14  

「try-catchとかめんどくせえってかよくわからねえ。失敗したらNULL返してくれりゃすぐ対処できるだろ」って人は多そうです。

#4 bussorenre 2012-08-15 08:59:38  

そうなのか、今はNULLを返さないのか…勉強になりました…汗

#5 yehawhe 2012-08-16 09:33:44  

返せよ

#6 HiroakiSoftware 2012-08-19 13:20:57  

しらなかった

#7 Chiether 2012-09-04 18:12:00  

MSDNより。 http://msdn.microsoft.com/ja-jp/library/cc440197(v=vs.71).aspx

C++ 暗黒時代(1994 年ごろまで)は、大部分のコンパイラの operator new は NULL を返していました。

この動作は C の malloc に対する妥当な外挿でした。

幸いなことに、私たちが生きている時代はもっと進んでいて、コンパイラは強く、クラスは美しく、

そして標準ライブラリの operator new は例外をスローします。

1994年。今から8年ほど前までですか...。

#8 tmurakam99 2012-09-11 13:13:55  

Android NDK だと今でも普通に NULL 返すけどな。デフォルトで例外切られてたりしたし。

#9 fresh_homepie 2013-01-20 10:18:42  

ところがどっこいGDI+のクラスではoperator newがオーバーロードされていて今でもNULLを返すから困る

#10 kunio_Yb 2013-08-02 05:56:12  

AndroidNDKの場合はベースがEmbeddedC++だからとかなのでは? EmbeddedC++の言語仕様には例外含まれてないよ。名前空間すらない。

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[JavaScript] とっても長いswitch/case文

このエントリーをはてなブックマークに追加

配列変数を全く理解できていなかった。

var rnd = Math.floor(Math.random() * 128...

鑑賞する »

[C] ×有限ループ ◯無限ループ

このエントリーをはてなブックマークに追加

有限ループのはずが、無限ループに... ...

int i,j;
for(i=0;i<100;i++) {
 for(j=0...

鑑賞する »

[Java] 内部的にunicodeだから日本語つかえ...

このエントリーをはてなブックマークに追加

これを書いた先輩に「英語で書きましょうよ...

class 会員 {
    private int 会員番号;
    p...

鑑賞する »