9

如果unique_ptr像这样初始化:

std::unique_ptr<Foo> i;
i.reset( new Foo() ); 

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

当作用域退出时,析构函数肯定会被调用。由于在返回reset之前不会调用调用new Foo(),因此似乎必须通过new在异常离开构造函数时释放分配的内存来处理此问题。

是这样吗?

4

1 回答 1

13

如果在 的构造函数中抛出异常Foo,则reset唯一指针的函数一开始就不会被执行。因此,唯一指针保留其原始值。

如果new对象构造引发异常,则表达式不会泄漏内存。

于 2013-01-10T23:36:48.200 回答