例外を発生させないnew(nothrow)演算子

ロベールのC++入門講座 05-15

newでメモリを動的確保した場合、非常に稀ではありますがメモリ確保に失敗する場合があります。

メモリ確保に失敗するとどうなるかは以前例外機構の勉強の時にチラッと出てきましたが、bad_allocという例外を発生させます。

しかしこの例外の発生を抑制する方法が存在します。それがnew(nothrow)です。

使い方を見てみましょう。

#include <iostream>
#include <new>
using namespace std;

class CSample {
public:
};

int main () {
    CSample* p = new(nothrow) CSample;
    
    if ( p == NULL ) {
        cout << "メモリ確保に失敗しました" << endl;
    }
    
    return 0;
}

placement newのときにも出てきたnewヘッダをインクルードする必要があります。

するとnew演算子を呼び出すときにnew(nothrow)のようにして例外を発生させないnew演算子を使用することができるようになります。メモリ確保に失敗したら例外の変わりにNULLが返ってくるのでそれでチェックすることができます。

ちなみに動作確認してみたかったんですが、メモリの動的確保が失敗するような状況を再現するのが面倒臭そうだったのでやめました。多分処理はあってると思います。