我正在查看CppCon 2014 companion code的"Hourglass API" talk,它主要是通过包含具有C签名的函数的类的成员函数来向C ++库提供C API。
除此之外,我对如何构造对象很感兴趣。在构造新hairpoll_construct
对象的函数hairpoll
中,指针由
std::make_unique<hairpoll>(person).release()
实际上是在处理异常的函数中调用的。一种更简单的方法是采用简单的
new hairpoll(person)
前者更可取的情况是什么?这是否与这个特殊的API如何工作有关,还是比这更普遍?
答案 0 :(得分:2)
如果构造函数抛出,new
表达式¹会在传递异常之前自动释放内存。
作者可能认为有必要使用临时unique_ptr
来实现这一点。
我不知道有什么好处。
¹除非类定义了一个分配器函数,否则operator new
没有相应的解除分配函数operator delete
。一旦这是Microsoft的MFC类库中的调试功能的情况。内存泄露,但仅在调试版本中泄露。
功能