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