***

Feb 25, 2011 16:13

#1. Возвращаясь к теме function + bind.
http://cd-riper.livejournal.com/324254.html
Хотел бы озвучить очевидное -- bind, по сути своей, представляет замыкание, штуку хорошо известную по другим языкам программирования. Одна проблема -- обычно языки с замыканиями поддерживают сборку мусора. В C++ GC нет, и об этом надо помнить, используя bind и передавая в него что-то по ссылке (ну или по указателю). Объект function свободно копируемый, поэтому всегда прикидываете, будет ли корректна замкнутая ссылка, если кто-то попытается сохранить результат bind с ней внутри.
Кэп предостерегает: у вас 100% проблемы, если вы замкнули ссылку на объект, лежащий на стеке, и объект, которому вы передали function, решил сохранить его, чтобы вызывать попозже.
И еще. Замыкая по значению, разумеется, оценивайте тяжеловесность объекта. Эксперименты показывают, что только при создании замыкания на value тип, конструктор копирования для этого типа может быть вызван 5 (!) раз.

#2. На днях сношались с веселым багом.
В какой-то момент перестала работать release версия проекта -- не стартует и все.
Полезли под капот -- там были переделки, связанные с необходимостью использовать Qt GUI. Вся работа с виджетами обязана происходить строго в контексте главного потока приложения, поэтому тело основного потока выполнения было перенесено в отдельный thread, который запускался по сигналу внутри главного message loop Qt. Сигнал этот вызывался, естественно, до запуска цикла обработки сообщений. И вот в релизной сборке он почему-то не срабатывал.
Перерыли все верх дном, чтобы, после всего, найти банальную причину такой небанальной проблемы. В линковку релиза кое-кто добавил (по головотяпству) дебажную версию GUI библиотеки.
Ох, блин...

c++, programming

Previous post Next post
Up