在下面的代码示例中,C++标准是否保证在内存分配(调用operator new)之后但在调用X的构造函数之前评估'++ i'?
new X( ++i )
dirkgently.. 12
从我的n2798副本:
5.3.4新的
21是否在评估构造函数参数之前或在评估构造函数参数之后但在进入构造函数之前调用了分配函数是未指定的.如果分配函数返回空指针或使用异常退出,还是未指定是否计算构造函数的参数.
与(避免含糊不清)一起阅读:
5.3.4新的
8 new-expression通过调用分配函数(3.7.4.1)获取对象的存储空间.如果newexpression通过抛出异常终止,它可以通过调用释放函数来释放存储(3.7.4.2).如果分配的类型是非数组类型,则分配函数的名称为operator new,释放函数的名称为operator delete.如果分配的类型是数组类型,则分配函数的名称为operator new [],而释放函数的名称为operator delete [].[...]
这几乎回答了这个问题.答案是不'.
从我的n2798副本:
5.3.4新的
21是否在评估构造函数参数之前或在评估构造函数参数之后但在进入构造函数之前调用了分配函数是未指定的.如果分配函数返回空指针或使用异常退出,还是未指定是否计算构造函数的参数.
与(避免含糊不清)一起阅读:
5.3.4新的
8 new-expression通过调用分配函数(3.7.4.1)获取对象的存储空间.如果newexpression通过抛出异常终止,它可以通过调用释放函数来释放存储(3.7.4.2).如果分配的类型是非数组类型,则分配函数的名称为operator new,释放函数的名称为operator delete.如果分配的类型是数组类型,则分配函数的名称为operator new [],而释放函数的名称为operator delete [].[...]
这几乎回答了这个问题.答案是不'.