2012-02-22 50 views
1

我有一個C++類的vector<float>成員,它們在構造函數中初始化爲一個由構造函數的參數決定的大小。如何在C++中測試向量初始化成功/失敗

summingBuffer = vector<float>(requiredSize); 

如何檢查矢量構造函數是否已成功分配所需空間?實例變量不是指針(它們應該是?),所以if (NULL==myVector)不起作用。 vector是否在分配錯誤上拋出異常?事後檢查.size()怎麼樣?

謝謝...

回答

0

的載體構造將提高bad_alloc如果它無法分配足夠的存儲空間,無需額外的檢查。

如果你不是絕對需要它們,使用指針並不是一個好主意。另外,看起來你可以直接初始化你的向量,而不是通過使用構造函數的初始化列表來完成它。喜歡的東西:

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

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

感謝您的幫助和代碼片段。在那個例子中,bad_alloc異常是否會冒泡到調用foo的構造函數的客戶端代碼行?另外,我在這個FAQ問題的最後一句話中相信STL沒有處理其構造函數中的錯誤:http://yosefk.com/c++fqa/ctors.html#fqa-10.17也不能網上找到一個體面的參考。你知道嗎? – 2012-02-22 15:23:36

+0

'bad_alloc'會傳播直到它被捕獲(或導致程序死亡)。你錯誤地閱讀了FQA中的那一行。它表示STL不使用異常處理構造函數中的錯誤,而不是處理構造函數拋出的異常。 (一般來說,要小心你在FQA上閱讀的信息,我並不是說這是錯的,但是很有見地。) – Mat 2012-02-22 15:35:11

+0

很酷。感謝那。 – 2012-02-24 11:04:02

3

默認分配器拋出std::bad_alloc上分配失敗,就像new T一樣。所以,不,沒有必要檢查尺寸。這不是C.