智能指针' "异常安全" ......示例?

时间:2015-03-07 07:50:48

标签: c++ exception smart-pointers

什么是一个简单的说明性示例,展示" Exception Safety" C ++智能指针的功能,总是与原始指针进行比较。

我不会从材料中复制文本,但据我所知,智能指针应该能够处理如下情况,正确释放std::vector的资源。但是,对于此代码,~A()~vector()都没有被调用 - 它只是抛出并失败,超出范围异常 - 正是指向常规指针所期望的。我错过了什么?

class Aimpl
{
public:
    std::vector<double> x;
};

class A
{
public:
    A() : pimpl(std::make_unique<Aimpl>())
    {
        pimpl->x.resize( 1 );
    };

    ~A()
    {};

    void doMess()
    {
        //out-of-range exception
        pimpl->x[2] = 0;
    };

private:
    std::unique_ptr<Aimpl> pimpl;
};

0 个答案:

没有答案