gpt4 book ai didi

c++ - 异常安全和 make_unique

转载 作者:IT老高 更新时间:2023-10-28 21:37:08 30 4
gpt4 key购买 nike

澄清一下,使用 make_unique 仅在表达式中有多个分配时才增加异常安全性,而不仅仅是一个,对吗?例如

void f(T*);

f(new T);

是完全异常安全的(就分配和东西而言),而

void f(T*, T*);

f(new T, new T);

不是,对吗?

最佳答案

不仅当你有多个分配时,而且当你可以在不同的地方 throw 时。考虑一下:

f(make_unique<T>(), function_that_can_throw());

对比:

f(unique_ptr<T>(new T), function_that_can_throw());

第二种情况,允许编译器调用(按顺序):

  • new T
  • function_that_can_throw()
  • unique_ptr<T>(...)

显然如果 function_that_can_throw实际上抛出然后你泄漏。 make_unique防止这种情况发生。

当然,第二次分配(如您的问题)只是 function_that_can_throw() 的特例。 .

作为一般经验法则,只需使用 make_unique使您的代码保持一致。当您需要 unique_ptr 时,它总是正确的(阅读:异常安全) ,并且它对性能没有任何影响,因此没有理由不使用它(实际上使用它会引入很多陷阱)。

关于c++ - 异常安全和 make_unique,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19472550/

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