В условиях ограничений по времени и "враждебной" обстановки это нервирует, надо быть в хорошей форме. А так, всякие кодоварсы и кодофорсы пользуются успехом.
По свойствам таких групп достаточно взять любой элемент, кроме единицы и нуля, и его степени дадут вам все элементы.
проходим по длине - 1, чтобы проверить максимально ли число
выводим i-тый и i-1 элементы
сравниваем их
mx = numbers[i+1] # присваиваем к mx максимальное из i-тый и i-1 элементы
Умершего объекта обычно больше нет. Его память возвращена системе, или переиспользована для других данных компилятором. Любое обращение к памяти объекта после вызова деструктора (если вы его руками, конечно, не вызываете) - это уже обращение по висящему указателю, что есть UB.
Если же вы сами руками вызываете деструктор у объекта (при этом у вас должен быть собственный какой-то менеджер памяти), то в этом случае, раз вы все еще хотите обращатся к какому-то полю объекта, вам стоит его не уничтожать, а переводить в "невалидное" состояние. Память все-равно не освобождена - ведь иначе UB будет. Для этого будет достаточно тупо
bool is_alive
и не надо какую-то защиту с канарейками городить. Ну или использовать первые несколько байт для пометки о валидности объекта, а остальные реинтерпритировать как ваш объект, тогда проверка будет как бы отдельно от логики самого объекта.Не совсем понимаю контекст.
Это каким таким кодом? Если только у вас не собственный менеджер памяти, то объект трется при вызове delete на указателе, или после выхода переменной из scope. А деструктор обычно не трет объект, а лишь вызывается автоматически перед его "удалением" (не считая вызова free какого-нибуть).