Если конструктор дает сбой, он выдает какое-то исключение. Это не должно быть, потому что память не может быть выделена; все, что выкинуло исключение, приведет к сбою, включая throw
операторы, которые вы пишете сами. Идея обычно заключается в том, чтобы создать пригодный для использования объект или создать исключение.
Если конструктор дает сбой, то успешно созданная деталь отсутствует. Все прошло.
Я не знаю, что означает неудачный деструктор. Он выполнит любой применимый код и ничего не вернет. Если код написан плохо, он может не выполнить то, что хочет программист, но это верно для всех функций.
Деструкторы никогда не должны бросать исключения. (Они могут вызывать подпрограммы, которые выдают, но они должны перехватывать все исключения и сами с ними разбираться.) Если деструктор выбрасывает, и он вызывается потому, что было сгенерировано исключение, и он разматывает стек, программа вылетает так или иначе. (Существуют механизмы, позволяющие определить, раскручивается ли стек или нет, но в лучшем случае вы пишете деструктор двумя разными способами, и их сложно проверить обоими.)