FC2ブログ

迷いの国のxxx HYPER

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告
|

お仕事メモ。

今の会社に入ってから、
STLを頻繁に使うようになった。

C言語って文字列使いにくいし、
メモリ確保するようなプログラムでは、
リークなんてのもよく聞く話で。

で、このSTL。メモリ確保・解放を自動的にしてくれるし、
文字列もstd::stringなんて便利なものがある。

でも、やっぱりメモリの心配はしなくてはいけない。
そこで。

std::vectorのpush_backで
メモリ確保に失敗した場合、
std::bad_allocがthrowされる。

あまりやりたくはないけれども次のコードでテストできる。

------------

 std::vector<char> test_array;
 std::vector<char> copy_array;
 test_array.clear();
 copy_array.clear();

 for(;;)
 {
  try
  {
   test_array.push_back('a');
  }
  catch(std::bad_alloc)
  {
   printf("bad_alloc!\n");
   break;
  }
 }

 printf("array size is %d\n",test_array.size());

 //vectorのoperation=ではどうなるか?

 try
 {
  copy_array = test_array;
 }
 catch( ... )
 {
  //ここには来ない(エラーはthrowされていない)
  //エラーの発生しないサイズを代入しているため?
  printf("copy array size is%d\n",copy_array.size());
  printf("catch error!\n");
 }

 printf("copy array size is%d\n",copy_array.size());

---------
多分もっと大きな型を使えば短時間でテストできるんじゃないかとか。

push_backでのメモリ確保に失敗した場合に、std::bad_allocがthrowされると
明記されたエビデンスがまだ見つかっていない。(STLのソース見ればいいのでしょうけど)


STLは私にとってまだ謎ばかりです‥。

スポンサーサイト
プログラム
| コメント:0 | トラックバック:0 |
<<初めて | ホーム | 暴走王蟲>>

コメント

コメントの投稿















管理者にだけ表示を許可する

トラックバック

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。