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