У живого объекта проверочная цифра правильная, а у умершего
bool is_alive
и не надо какую-то защиту с канарейками городить. Ну или использовать первые несколько байт для пометки о валидности объекта, а остальные реинтерпритировать как ваш объект, тогда проверка будет как бы отдельно от логики самого объекта.QModelIndex слишком мал, чтобы держать умный указательНе совсем понимаю контекст.
Объект может быть потёрт не только деструктором, но и совершенно посторонним кодом.
В условиях ограничений по времени и "враждебной" обстановки это нервирует, надо быть в хорошей форме. А так, всякие кодоварсы и кодофорсы пользуются успехом.
По свойствам таких групп достаточно взять любой элемент, кроме единицы и нуля, и его степени дадут вам все элементы.
проходим по длине - 1, чтобы проверить максимально ли число
выводим i-тый и i-1 элементы
сравниваем их
mx = numbers[i+1] # присваиваем к mx максимальное из i-тый и i-1 элементы
И ответ на ваш вопрос - нет, компиялтор может и удалить. Есть всякие платформо-зависимые функции для гарантированного зануления памяти, но как их прикрутить к атомикам - я не знаю. Но вообще компилятор может додуматся, что во время жизни объекта value не меняется и вообще удалить проверку нафиг.
Я бы не городил этот огород, а использовал тот же valgrind для проверки. Ну или, если хотите, то вам придется написать собственный менеджер памяти. Переопределить new и delete и или не удалять память вообще и там внутри где-то как-то помечать (например, выделить на 4 байт больше перед данными). Или где-то запоминать, что память отчищена и проверять на висячие указатели какой-то функцией, отдельной от возможно удаленного объекта.