#C/C++ · #PROGRAMMING ·

メモリ不足のときの例外処理

Cではメモリを確保するときにいちいち確保できたか/失敗したかをチェックしてその場でエラーだしたり、あるいはメモリ確保用の関数つくってその中でごにょごにょしたりするんだろうけど、うまくやらないと関数呼び出しが深くなってきたときに破綻する。

C++の例外を使えばもっとスマートにメモリ不足のときの処理ができるのでは?というわけで調べてみた。

まずメモリの例外というとMFCではCMemoryExceptionが飛んでくる。newのときも同じ。MFCを使わないとVC++6.0ではnewしたときはNULLが返ってくる。これは古い仕様で、最近のC++ではstd::bad_allocを返すことになっているらしい。

これではちょっとかっこ悪いのでVC++6.0でもnewをオーバーロードしてbad_allocを返すようにすればいい。Microsoftでもそんな記事書いてるし。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndeepc/htm/deep071599.asp

で、このbad_allocはhttp://www.kaimei.org/note/book_out/eff_cpp1.htmlによると僕の持ってるEffectiveC++にも書いてあったみたい。

この他newが失敗したときの処理方法として_set_new_handler()というのも使えるらしい。