在新表达式中,在内存分配后评估了初始化器



考虑代码

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:

new-initializer 中评估表达式之前,对分配函数的调用进行了测序。 在 new> new-expression

的值计算之前对分配对象的初始化进行了测序

相关内容

  • 没有找到相关文章

最新更新