Забавно, как все-таки иногда все поворачивается...
Недавно я писал про пойманное использование этого антипаттерна, но только что выяснилось, что я несколько погорячился с диагностикой...
Не знаю, чего уж тут больше - настырности или везения, но один из наших разработчиков получил такую же ошибку (в списке исправленных она еще не значится).
Он добросовестно начал копаться, в итоге выяснилось, что создаваемый через new объект где-то в одном из своих подобъектов при создании вызывает AccessViolation, а на нашу беду в цепочке обработчиков верхнего уровня встречается catch(...).
Как-то исторически сложилось, что обработка исключений SEH в обработчиках исключений C++ у нас активна (/EHa), поэтому catch(...) благополучно "маскирует" сбойную ситуацию, при этом сырой указатель на объект, который должен бы возвращаться "singleton'ом", остается ненулевым :-(
После этого при следующем обращении происходит вызов уже разрушенного недоконструированного объекта с понятными последствиями, поскольку вызов делается уже совершенно из другого места :-(
Происходит он уже мнооого позже исходной ситуации, поэтому концов было не найти...
Вывод - не нужно торопиться с диагностикой, даже если все кажется более чем ясным :-)
Комментариев нет:
Отправить комментарий