new T(...)vs。std :: make_unique <t>(...)。release()

时间:2017-01-12 16:29:21

标签: c++ constructor unique-ptr

我正在查看CppCon 2014 companion code"Hourglass API" talk,它主要是通过包含具有C签名的函数的类的成员函数来向C ++库提供C API。

除此之外,我对如何构造对象很感兴趣。在构造新hairpoll_construct对象的函数hairpoll中,指针由

获得
std::make_unique<hairpoll>(person).release()

实际上是在处理异常的函数中调用的。一种更简单的方法是采用简单的

new hairpoll(person)

前者更可取的情况是什么?这是否与这个特殊的API如何工作有关,还是比这更普遍?

1 个答案:

答案 0 :(得分:2)

如果构造函数抛出,new表达式¹会在传递异常之前自动释放内存。

作者可能认为有必要使用临时unique_ptr来实现这一点。

我不知道有什么好处。

¹除非类定义了一个分配器函数,否则operator new没有相应的解除分配函数operator delete。一旦这是Microsoft的MFC类库中的调试功能的情况。内存泄露,但仅在调试版本中泄露。 功能