Иногда приятно начинать заново. В С++ я могу использовать следующий простой маневр:
{
T x(31, Blue, false);
x.~T(); // enough with the old x
::new (&x) T(22, Brown, true); // in with the new!
// ...
}
В конце области действия деструктор снова запустится, и все будет хорошо. (Пусть также говорят, что T
немного особенный и ему не нравится назначаться, не говоря уже об обмене.) Но что-то говорит мне, что это не всегда без риска уничтожить все и повторить попытку. Существует ли возможный улов с этим подходом?