可以调用内存分配和构造函数与执行"新"表达式所需的其他操作交错吗?

sha*_*oth 3 c++ constructor class new-operator

假设我有以下课程:

 class Sample {
 public:
     Sample( int ) {}
 };
Run Code Online (Sandbox Code Playgroud)

一些函数返回 int

int SomeFunction()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而这段代码:

Sample* sample = new Sample( SomeFunction() );
Run Code Online (Sandbox Code Playgroud)

现在我期待以下顺序:

  • SomeFunction() 然后运行
  • ::operator new() 然后运行以为对象分配内存
  • class Sample 构造函数在已分配的内存上运行

这个顺序是固定的还是可以通过实现来改变,例如说第一个内存被分配,然后SomeFunction()调用,然后运行构造函数?换句话说,可以调用operator new()函数并调用类构造函数与任何东西交错吗?

dec*_*ype 8

订单未指定.[5.3.4]/21内容如下:

在评估构造函数参数之前或在评估构造函数参数之后但在输入构造函数之前是否调用[operator new]是未指定的.如果[operator new]返回空指针或使用异常退出,还是未指定是否计算构造函数的参数.