fre*_*low 12 c++ constructor exception side-effects sequence-points
考虑以下代码行:
new (p++) T();
Run Code Online (Sandbox Code Playgroud)
如果构造函数T()抛出异常,p保证已经增加了吗?
从5.3.4 [expr.new](引自n3242):
11 new-placement语法用于为分配函数提供其他参数.如果使用,则对通过组合参数列表创建的函数调用执行重载解析,该参数列表包括请求的空间量(第一个参数)和new-expression的新放置部分中的表达式(第二个和后续参数) .
所以在一个新表达式中,分配函数是从函数调用中使用的(这是有意义的).所有分配函数都是函数,包括实现提供的函数,来自3.7.4.1 [basic.stc.dynamic.allocation]:
1分配函数应是类成员函数或全局函数; [...]
因此,当从构造函数抛出异常时,已经进行了分配,并且已完全评估关联的函数调用表达式.
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |