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

投稿日: 2004年11月29日 更新日: 2017年07月22日

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()というのも使えるらしい。

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ