std :: unique_ptr :: reset和构造函数异常

lur*_*her 8 c++ constructor memory-management exception-handling

如果初始化unique_ptr如下:

std::unique_ptr<Foo> i;
i.reset( new Foo() ); 
Run Code Online (Sandbox Code Playgroud)

但抛出异常Foo::Foo(),问题是:内存分配会发生什么?unique_ptr如何避免泄露?这是在new运营商内部处理的吗?

当范围退出时,肯定会调用析构函数.由于在返回reset之前不调用调用new Foo(),所以new当异常离开构造函数时,似乎必须通过释放分配的内存来处理它.

这是怎么回事?

Ker*_* SB 11

如果在构造函数中抛出异常Foo,那么reset唯一指针的函数永远不会在第一个位置执行.因此,唯一指针保留其原始值.

new如果对象结构抛出异常表达不泄漏内存.