c++ - 在 new 表达式中分配内存后是否评估初始值设定项?

标签 c++ exception new-operator dynamic-memory-allocation object-initialization

考虑代码

auto p = new T( U(std::move(v)) );

然后初始化程序是 U(std::move(v))。让我们假设 T( U(std::move(v)) ) 没有抛出。如果在底层内存分配之后评估初始化程序,则代码是强异常安全的。否则,它不是。如果抛出内存分配,v 就会被移动。因此,我对内存分配和初始化程序评估之间的相对顺序很感兴趣。它是已定义的、未指定的还是什么?

最佳答案

是的,初始化是在分配之后计算的。引用 C++17 (N4659) [expr.new] 8.3.4/19:

The invocation of the allocation function is sequenced before the evaluations of expressions in the new-initializer. Initialization of the allocated object is sequenced before the value computation of the new-expression.

关于c++ - 在 new 表达式中分配内存后是否评估初始值设定项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49646113/

相关文章:

c++ - C++ 中的 constexpr int 和 constexpr double

java - 为什么我不能在我的 super() 调用周围使用 try block ?

c++ - 潜在的异常会带来开销吗?

jquery - JQuery 中的 new 运算符意味着

react-native - 未找到 React/RCTBridgeDelegate.h' 文件

c++ - 我不明白的模板方法中的语法错误

c++ - 优化 "It' 的 Great Pumpkin Patch。”ACM 1999 实践

c++ - Visual Studio 2013 上的 C++ 中的 glib

java - Java List.stream.forEach Lambda 表达式中未处理的 IOException

c# - 到 "new"或不到 "new"