【问题标题】:How to test for vector initialization success/failure in C++如何在 C++ 中测试向量初始化成功/失败
【发布时间】:2012-02-22 11:14:17
【问题描述】:

我有一个带有 vector<float> 成员的 C++ 类,这些成员在构造函数中初始化为由构造函数的参数之一确定的大小。

summingBuffer = vector<float>(requiredSize);

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

谢谢...

【问题讨论】:

    标签: c++ stl error-handling initialization


    【解决方案1】:

    默认分配器在分配失败时抛出std::bad_alloc,就像new T 一样。所以,不,不需要尺寸检查。这不是 C。

    【讨论】:

      【解决方案2】:

      如果向量构造函数无法分配足够的存储空间,它将引发bad_alloc,无需额外检查。

      如果您不是绝对需要指针,则使用指针不是一个好主意。

      另外,看起来您可以直接初始化向量,而不是使用构造函数的初始化列表来初始化。比如:

      struct foo {
        std::vector<float> things;
      
        foo(int vsize) : things(vsize) {
          // rest of constructor code
        }
      };
      

      【讨论】:

      • 感谢帮助和代码 sn-p。在那个例子中,bad_alloc 异常会冒泡到调用 foo 的构造函数的客户端代码行吗?此外,我被这个常见问题解答问题的最后一句话引导相信 STL 没有处理其构造函数中的错误:yosefk.com/c++fqa/ctors.html#fqa-10.17 我也找不到像样的在线参考。你知道吗?
      • bad_alloc 将传播直到它被捕获(或导致你的程序死掉)。您误读了 FQA 中的那一行。它说 STL 不使用异常处理构造函数中的错误,并不是说 STL 不处理构造函数抛出的异常。 (通常,请注意您在 FQA 上阅读的信息。我并不是说它是错误的,但它非常固执。)
      猜你喜欢
      • 2012-05-21
      • 2021-01-23
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      相关资源
      最近更新 更多