Regular goto
в C ++ учитывает время жизни объекта - при использовании goto
для выпрыгивания из блока будут запускаться деструкторы для соответствующих локальных переменных.
start:
NonTrivial object;
if (again()) goto start; // will call object.~NonTrivial()
То же самое верно при использовании обозначает как значение * расширение 1007 *?
start:
NonTrivial object;
goto *(again() ? &&start : &&end);
end:
G CC с радостью принимает этот код, но, похоже, игнорирует любой эффект, который goto
может оказать на время жизни object
. лязг жалуется. Ищите вызовы NonTrivial()
и ~NonTrivial()
в Проводник компилятора .
Какой компилятор работает правильно? Можно ли вообще поддерживать этот вид косвенного ветвления, а также правильно управлять временем жизни объекта и RAII?