Буст я сам боюсь смотреть, да и не могу понять зачем он мне. Просто дело в том что я этот STL применяю повсюду, и вот задумался - а не есть ли это плохо?
В бусте есть очень много полезных кроссплатформенных вещей, поэтому приходится его использовать, альтернатив нет и быть не может из-за специфики языка С++.
Буст для моих задач - слишком тяжелая зависимость, и без необходимости его использовать не стоит хотя бы из-за этого. И все же, изначально вопрос был про STL :)
Много слышал болтовни про ужасную реализацию, кроме того - смущает обилие альтернативных реализаций (в том же Qt например). Впринципе, мне возможностей STL вполне хватает...
и STL, и Boost оперируют понятием концепта (duck typing), которого в текущем стандарте C++ нет; компилятор проверку концептов не выполняет, библиотеки стандартных концептов нет. а ошибка в трактовке того или иного концепта может привести к очень нехорошим последствиям. примерами стандартных (!) нарушений концептов STL являются vector<auto_ptr> (да и сам auto_ptr) и vector<bool>
вот это - опасно, потому как для auto_ptr и vector<bool> ты знаешь в чём дело, а для произвольного пользовательского типа ошибка нарушения концепта может выплыть самым неожиданным образом. и будет она очень читаемой, и поместится целиком на трёх рулонах туалетной бумаги
нет, не путаю. RAII можно организовать и без умных указателей, и не нужны для RAII именно указатели (тем более столько, сколько их есть в boost). впрочем, дело вкуса
> смартпоинтеры это 1) смарт + 2) поинтеры. скажи, на кой чёрт для RAII нужна часть 2?
Не нужна, кто спорит. Прочитай еще раз мой предыдущий пост: я хотел сказать, что смартпоинтеры - это не указатели для RAII, а RAII для указателей, только и всего. Сравнение с GC некорректно.
Можно сказать, что реализация того немногого, что есть в STL, как правило, уже отточена до блеска. Риски минимальны, особенно в сравнении с созданием собственных велосипедов. > Смущает обилие альтернативных реализаций
Из "альтернативных" реализаций сталкивался только с STLPort - его имеет смысл использовать, если тебе нужно гарантированное единообразное до мелочей поведение STL на всех платформах. > в том же Qt например
Qt традиционно использовал собственные контейнеры, т.к. "в лихие 90-е" полагаться на STL с учетом всех поддерживаемых библиотекой платформ было нельзя. Сейчас использование контейнеров Qt никак не навязывается, хотя они полностью совместимы с STL и обладают некоторыми очень полезными фичами. Например т.н. неявное разделение данных - можешь вернуть из метода вектор с миллионом элементов или передать его по значению, не потеряв в производительности. > Впринципе, мне возможностей STL вполне хватает...
Напрасно. По крайней мере без boost.smart_ptr или его альтернативы серьезного программирования на C++ не получится.