考虑以下情况:
struct X { ... };
struct Y
{
Y(...);
...
X x;
...
}
X f()
{
...
if (...)
throw E;
...
}
Y::Y(...) :
... ,
x(f()) ,
...
{
...
}
这里有任何未定义的行为吗?抛出 E 时,这样的设计是否存在任何陷阱或潜在问题?
更新:
Y::x
可能不是 的唯一成员变量,可能不是类中的第一个成员变量,并且可能在init 列表Y
的中途被初始化。Y::Y