最初からやり直すのが良い場合もあります。C ++では、次の簡単な操作を使用できます。
{
T x(31, Blue, false);
x.~T(); // enough with the old x
::new (&x) T(22, Brown, true); // in with the new!
// ...
}
スコープの最後で、デストラクタが再度実行され、すべてが正常に表示されます。(またT
、少し特別で、割り当てられるのは好きではありません。交換は言うまでもありません。)しかし、すべてを破壊して再試行することは必ずしもリスクがないわけではないということを教えてくれます。このアプローチで問題が発生する可能性はありますか?