我正在查看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类库中的调试功能的情况.内存泄露,但只在调试版本中.