Подтвердить что ты не робот

Повреждает ли утечка памяти поведение undefined?

Это обсуждение появилось в комментариях к другому сообщению.

Пример кода:

#include <string>

void func()
{
    std::string* foo;
    foo = new std::string[125];

    throw 1;

    delete [] foo;
}

int main()
{
     try { func(); }
     catch(int x) {}
}

Вызывает ли эта программа поведение undefined? Утверждалось, что это UB под §3.8 p4, что:

Программа может завершить время жизни любого объекта, повторно используя хранилище, которое занимает объект, или явно вызвав деструктор для объекта типа класса с нетривиальным деструктором. Для объекта типа класса с нетривиальным деструктором программа не требует прямого вызова деструктора до того, как хранилище, которое объект занимает, повторно используется или освобождается; однако, если нет явного вызова деструктора или если выражение удаления (5.3.5) не используется для освобождения хранилища, деструктор не должен быть неявно вызван и любая программа, зависящая от побочных эффектов, создаваемых деструктором имеет поведение undefined.

4b9b3361