新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)