2012-02-22 13 views
1

vector<float>のメンバーを持つC++クラスをコンストラクタの引数の1つで指定されたサイズにコンストラクタで初期化します。C++のベクトル初期化の成功/失敗をテストする方法

summingBuffer = vector<float>(requiredSize); 

ベクターコンストラクタが必要なスペースを割り当てたかどうかを確認するにはどうすればよいですか?インスタンス変数はポインタではありません(そうでなければなりません)。if (NULL==myVector)は機能しません。 vectorは割り当てエラーで例外をスローしますか?後で.size()をチェックするのはどうですか?

は、それが十分なストレージを割り当てることができませんでした場合は、ベクトルのコンストラクタは、余分なチェックの必要性を全くbad_allocを上げていないだろう...

答えて

0

、ありがとうございました。

ポインタを使用することは、絶対に必要ない場合はお勧めできません。

また、コンストラクタのイニシャライザリストを使ってどのように行うのではなく、直接ベクトルを初期化できるかのようです。ような何か:

struct foo { 
    std::vector<float> things; 

    foo(int vsize) : things(vsize) { 
    // rest of constructor code 
    } 
}; 
+0

ヘルプとコードスニペットありがとう。この例では、bad_alloc例外は、fooのコンストラクタを呼び出すクライアントコードの行にバブルするでしょうか?また、STLがそのコンストラクタでエラーを処理しなかったというこのFAQの質問の最後の文章で、私は信じるようになりました:http://yosefk.com/c++fqa/ctors.html#fqa-10.17まともなリファレンスをオンラインで見つける。あなたは何か知っていますか? –

+0

'bad_alloc'は、それが捕捉されるまで伝播します(またはあなたのプログラムが死んでしまう)。あなたはFQAでその行を誤読しています。 STLは、コンストラクタで発生した例外をSTLが処理しないということではなく、例外を使用してコンストラクタのエラーを処理しないと言います。 (そして、一般的には、FQAで読んだ情報には注意してください。間違っているとは言わないが、非常に賛成です。) – Mat

+0

cool。それに感謝します。 –

3

デフォルトアロケータはnew Tがするよう、障害が発生した配分にstd::bad_allocをスローします。したがって、いいえ、サイズの確認は必要ありません。これはCではありません。

関連する問題