В свое время пользовался Тест-комплитом, но потом перешел на самостоятельное написание Perl-скриптов с модулем Win32:GUI. Они отлично эмулировали действия пользователя. А для удобства запускал их на виртуальных машинах.
Применение RAII в моей практике вовсе не затруднительно. Однако опыт показывает, что между «тяжелым» конструктором (RAII) и «легким» (с отложенной инициализацией) лучше выбрать второй.
1. Это означает, что я не смогу показать очень красивый, элегантный и полностью безопасный по отношению к исключениям код, стабильность которого, тем не менее, будет зависеть от фазы луны и случайного содержимого стека.
Обычно это происходит так. Приходит багрепорт: «У половины наших клиентов с вин2003 программа крэшится». Я лично с удовольствием бы писал много нового кода на С++11, однако приходится браться за эту ошибку. Просто потому что у меня больше опыта в отладке подобных проблем. Я вообще три вещи делаю очень хорошо: пишу код на С++, отлаживаю код на С++ и пишу очень красивые configure.ac. Если кто не верит, может зайти в профиль и посчитать мой возраст.
И поскольку я не собираюсь менять род деятельности и кровно заинтересован в экономии своего времени, то настаиваю на своей мысли: RAII не следует использовать для fopen() и подобного.
Во-первых, этот код не компилируется в VC2012.
Во-вторых, использование fopen() deprecated.
В-третьих, если я, например, буду искать в этом коде трудноуловимый баг, то я хочу, чтобы каждая функция стояла на отдельной строчке, чтобы я мог поставить брейкпоинт — то есть вместо file_(fopen()) я хочу всегда видеть { file_ = fopen();… }
В-четвертых, пусть код немного другой, исключение происходит после некоторого первого конструктора, но перед инициализацией переменной file_. В деструкторе вызывается fclose(0xCCCCCCCC); и имеем повторное исключение в обработчике.
Помню в билд-скрипте для Apache Ant в одном из наших проектов обновление версии в нужных файлах делалось в одну строчку. Точнее в две. Первая строчка работала с точками, вторая с запятыми.
Обычно это происходит так. Приходит багрепорт: «У половины наших клиентов с вин2003 программа крэшится». Я лично с удовольствием бы писал много нового кода на С++11, однако приходится браться за эту ошибку. Просто потому что у меня больше опыта в отладке подобных проблем. Я вообще три вещи делаю очень хорошо: пишу код на С++, отлаживаю код на С++ и пишу очень красивые configure.ac. Если кто не верит, может зайти в профиль и посчитать мой возраст.
И поскольку я не собираюсь менять род деятельности и кровно заинтересован в экономии своего времени, то настаиваю на своей мысли: RAII не следует использовать для fopen() и подобного.
Во-вторых, использование fopen() deprecated.
В-третьих, если я, например, буду искать в этом коде трудноуловимый баг, то я хочу, чтобы каждая функция стояла на отдельной строчке, чтобы я мог поставить брейкпоинт — то есть вместо file_(fopen()) я хочу всегда видеть { file_ = fopen();… }
В-четвертых, пусть код немного другой, исключение происходит после некоторого первого конструктора, но перед инициализацией переменной file_. В деструкторе вызывается fclose(0xCCCCCCCC); и имеем повторное исключение в обработчике.