次の状況を考慮してください。
struct X { ... };
struct Y
{
Y(...);
...
X x;
...
}
X f()
{
...
if (...)
throw E;
...
}
Y::Y(...) :
... ,
x(f()) ,
...
{
...
}
ここに未定義の動作はありますか?Eが投げられたとき、そのようなデザインに落とし穴や潜在的な問題はありますか?
アップデート:
Y::x
の唯一のメンバー変数ではない可能性があり、クラスの最初のメンバー変数ではない可能性があり、 initリストY
の途中で初期化される可能性があります。Y::Y