gpt4 book ai didi

c++ - new T(...) 与 std::make_unique(...).release()

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:54 24 4
gpt4 key购买 nike

我正在查看 companion code"Hourglass API" talk CppCon 2014 的主要内容是通过使用具有 C 签名的函数包装类的成员函数来为 C++ 库提供 C API。

除其他外,我对对象的构造方式很感兴趣。在构造新的hairpoll对象的函数hairpoll_construct中,通过

获取指针
std::make_unique<hairpoll>(person).release()

实际上是在处理异常的函数中调用的。一个更简单的方法是求助于一个普通的

new hairpoll(person)

哪些场景更适合前者?这是否与这个特殊 API 的工作方式有关,还是比这更通用?

最佳答案

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

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

我不知道有什么好处。

<支持>¹ 除非该类定义了一个分配器函数,一个operator new,没有相应的释放器函数,operator delete。 Microsoft 的 MFC 类库中的调试功能曾经是这种情况。内存泄漏,但仅限于调试版本。

关于c++ - new T(...) 与 std::make_unique<T>(...).release(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41618306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com