c – new T(…)vs.std :: make_unique(…).release()

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

除此之外,我对这个对象的构造方式很感兴趣.在构造新的hairpoll对象的函数hairpoll_construct中,通过获取指针

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

实际上是在处理异常的函数中调用的.一种更简单的方法是诉诸平原

new hairpoll(person)

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

最佳答案 如果构造函数抛出,则新表达式¹在传递异常之前自动释放内存.

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

我不知道有什么好处.

¹除非类定义了一个allocator函数,一个new new,没有相应的deallocator函数,运算符delete.一旦这是Microsoft的MFC类库中的调试功能的情况.内存泄露,但只在调试版本中.

点赞