什么是一个简单的说明性示例,展示" 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;
};