新T(…)与标准::使_独一无二<;T>;(…).release() 我在查看CPPCON 2014的内容,它主要是通过给一个具有C签名功能的类的成员函数包装来提供C++的C API。

新T(…)与标准::使_独一无二<;T>;(…).release() 我在查看CPPCON 2014的内容,它主要是通过给一个具有C签名功能的类的成员函数包装来提供C++的C API。,c++,constructor,unique-ptr,C++,Constructor,Unique Ptr,除此之外,我对这个物体是如何构造的很感兴趣。在构造新hairpoll对象的函数hairpoll\u construct中,指针通过以下方式获得: std::make_unique<hairpoll>(person).release() 在哪些情况下前者更可取?这是否与这个小API的工作方式有关,或者它比它更通用?如果构造函数抛出,则新的表达式在传递异常之前会自动释放内存 作者可能认为有必要使用临时的unique\u ptr来实现这一点 我不知道有什么好处 除非类定义了一个分配器函

除此之外,我对这个物体是如何构造的很感兴趣。在构造新
hairpoll
对象的函数
hairpoll\u construct
中,指针通过以下方式获得:

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

在哪些情况下前者更可取?这是否与这个小API的工作方式有关,或者它比它更通用?

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

作者可能认为有必要使用临时的
unique\u ptr
来实现这一点

我不知道有什么好处

除非类定义了一个分配器函数,
运算符new
,没有相应的deallocator函数,
运算符delete
。微软MFC类库中的调试功能曾经如此。内存泄漏,但仅在调试版本中泄漏。

关于你的脚注,我不确定作者(S.Du Toit)在避免使用
new
时是否考虑过这种情况,因为
hairpoll\u destruct
使用
delete
@user1735003:
unique\u ptr
无论如何都不会有帮助。除了构造函数中的一个例外,
unique\u ptr
中的指针成员甚至没有赋值/初始化。异常停止那里发生的任何事情,并且
unique\u ptr
未完全构造,因此未调用其析构函数,因此
unique\u ptr
将不参与清理。可能的话,可能不再使用
new
new hairpoll(person)