考虑以下代码:
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
已经被移动。因此,我对内存分配和初始化程序评估之间的相对顺序感兴趣。它是定义的、未指定的还是什么?