Уничтожить, а затем построить новый объект, используя ту же переменную

Иногда приятно начать сначала. В C ++ я могу использовать следующий простой маневр:

{

    T x(31, Blue, false);

    x.~T();                        // enough with the old x

    ::new (&x) T(22, Brown, true); // in with the new!

    // ...
}

В конце области видимости деструктор снова запустится, и все выглядит хорошо. (Допустим, T немного особенный и не любит, когда его назначают, не говоря уже о замене местами). Но что-то мне подсказывает, что не всегда без риска все уничтожить и попробуйте еще раз. Есть ли у этого подхода возможный подвох?

28
задан jww 17 July 2016 в 23:47
поделиться