如何在C++中测试向量初始化成功/失败

问题描述:

我有一个C++类的vector<float>成员,它们在构造函数中初始化为一个由构造函数的参数决定的大小。如何在C++中测试向量初始化成功/失败

summingBuffer = vector<float>(requiredSize); 

如何检查矢量构造函数是否已成功分配所需空间?实例变量不是指针(它们应该是?),所以if (NULL==myVector)不起作用。 vector是否在分配错误上抛出异常?事后检查.size()怎么样?

谢谢...

的载体构造将提高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

默认分配器抛出std::bad_alloc上分配失败,就像new T一样。所以,不,没有必要检查尺寸。这不是C.