【问题标题】:Exception guarantee for vector multiple objects constructor向量多对象构造函数的异常保证
【发布时间】:2026-02-01 15:05:02
【问题描述】:

调用此向量构造函数时:

vector( size_type count,
         const T& value,
         const Allocator& alloc = Allocator());

如果抛出异常并且一些 T 对象已经被构造但不是全部,构造的元素是否总是被调用析构函数?

 std::vector<std::vector<T>> internalBuffer = 
     std::vector<std::vector<T>>(1024, std::vector<T>(1024, 0));

我假设默认分配器和 c++11。

【问题讨论】:

    标签: c++11 vector


    【解决方案1】:

    注意:该特定构造函数已从 C++11 中删除。

    除此之外,在这种情况下将调用所有已构造对象的析构函数是正确的。

    【讨论】:

    • 感谢您指出这一点,我编辑了问题。标准中是否有任何说明将调用所有析构函数?