C++容器是否异常安全?

cat*_*_cd 1 c++ containers

我使用隐式的构造函数和一个load()输入属性的成员,但也可以抛出异常.

我的问题是:如果属性是每天C++容器,如果发生异常,我会得到内存泄漏load()吗?

谢谢你的阅读.

编辑:示例代码,以帮助澄清我的问题.

class One
{
public:
    std::vector<int> stuff;

    void load() {
        stuff.resize(13);
        stuff[0] = 43;

        std::bad_alloc ba;
        throw ba; // will this cause memory leaks? (as far as this class is concerned)
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个愚蠢的问题,但我不得不问.

Mar*_*ork 10

容器本身是异常安全的.
但它还取决于放置在包含中的类型以及是否已正确写入.

即:异常不应该逃避析构函数

该标准定义了对容器和异常的以下保证:

23.2.1一般容器要求[container.requirements.general]

第10段:

除非另有规定(参见23.2.4.1,23.2.5.1,23.3.3.4和23.3.6.5),本条款中定义的所有容器类型均满足以下附加要求:
- 如果插入时插入()函数抛出异常单个元素,该函数没有任何影响.
- 如果push_back()或push_front()函数抛出异常,则该函数不起作用.
- 没有erase(),clear(),pop_back()或pop_front()函数抛出异常.
- 没有复制构造函数或返回迭代器的赋值运算符会引发异常.
- 没有swap()函数抛出异常.