Из стандарта C ++ 2003 5.3.4 / 17 - Новое:
Если какая-либо часть инициализации объекта, описанная выше, завершается выдачей исключения и может быть найдена подходящая функция освобождения, функция освобождения вызывается для освобождения памяти, в которой создавался объект, после чего исключение продолжает распространяться в контексте нового выражения. Если не может быть найдена однозначная совпадающая функция освобождения, распространение исключения не приводит к освобождению памяти объекта. [Примечание: это уместно, когда вызываемая функция выделения не выделяет память; в противном случае это может привести к утечке памяти. ]
Таким образом, возможна или не может быть утечка - это зависит от того, может ли быть найден соответствующий деаллокатор (что обычно происходит, если оператор new / delete не был переопределен). В случае, когда есть подходящий деаллокатор, Компилятор отвечает за подключение в вызове, если конструктор выдает.
Обратите внимание, что это более или менее не связано с тем, что происходит с ресурсами, полученными в конструкторе, и именно это обсуждалась моя первая попытка ответа - и это вопрос, который обсуждается во многих часто задаваемых вопросах, статьях и публикациях.