![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Сейчас пролистываю мануал в поисках - в чем же загвоздка совместного использования - найти не нашел - но строгие указатели применяются авторами к объектам VCL на лево и на право. Добавлено через 57 секунд |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Думаю все дело в конкретных случаях. Ведь молотком надо гвозди забивать, но с дури можно и шурупы. Просто надо четко предстовлять себе как работает vector, сколько он сделает вызовов конструктора копирования, сколько создаст временных объектов и т.п. Достаточно много примеров неумелого использования шаблонов, а потом авторы кричат - полная лажа этот STL. А на самом деле просто неправильно пользуются. Лично видел один код, когда автор потратил уйму времени на создание конструкторов копирования, операторов присваивания для класса, котором было больше полусотни полей, причем часть из них стркутуры. Когда он все это запихал в вектор, да еще размером больше 100 тысяч элементов и получил ужасающие тормоза, он начал кричать, что STL писали полные ламеры и никакой оптимизации алгоритмов там нет. Он очень удивился, когда узнал, что через указатели все это делается гораздо проще и летает круче самолета. Добавлено через 3 минуты и 31 секунду
goto здесь не обсуждаем! Это был пример! Никто goto не должен боятся - он мирный и не кусается! Обсуждаем опасность конструкции vector<TDateTime> Почему я должен использовать TList в данном случае. И что будет плохого, если все-таки использую vector. Вопрос не праздный - я действительно использовал vector<TDateTime> и если это опасно - я срочно переделаю код, пока помню где это. Хочу знать: почему опасно? |
||||
|
|||||
| mrbrooks |
|
||||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Про нечто подобное и писали авторы.
Я честно говоря таких не встречал. Наоборот в STL сила С++ имхо. Добавлено через 1 минуту и 9 секунд По памяти вспомнить не могу - давно читал - но помню два слова относительно VCL - осторожно и Дельфи. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если у TDateTime есть правильно реализованные конструктор по умолчанию и конструктор копий, то, имхо, опасности использования в векторе никакой. если будете хранить в векторе по указателю, то придется самому следить за удалением.. стандартные средства (стд) такого не поддерживают. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Если вспомните, скажите пожалуйста. Очень интересно, если честно. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Предполагаю из за бинарной совместимости, std::vector не рекомендуется передавать между приложением и библиотекой. насчет VCL не знаю есть ли, но по идеи они должны гарантировать совместимость для "своих" типов. Это сообщение отредактировал(а) mes - 23.3.2009, 16:41 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Что значит бинарная совместимость? Ведь объект vector создается налету - как же он бинарно может быть не совместим? Копипастим vector и делаем его нешаблонным, что изменится? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
отсутствие бинарной совместимости означает что в двух приложениях(откомипилированных разными компиляторами или разными версиями одного) один и тот же объект (vector) , будет иметь разную бинарную структуру и в таком случае передавать объект одного другому приложению нельзя. В пределах одного приложения проблем по вышеообозначеному предмету соответсвенно нет. Это сообщение отредактировал(а) mes - 23.3.2009, 16:55 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Ну так можно сказать про любой класс. Почему это только на вектор распространяется? Ведь любой класс, откомпилированный разными компиляторами (да даже и одним и тем же с разными настроуками выравнивания) может оказаться бинарно несовместимым. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вектор был для примера, речь идет о библиотеках в целом : std и VCL первый абзац : http://qt.osdn.org.ua/binarycompat.html Это сообщение отредактировал(а) mes - 23.3.2009, 17:10 |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Как можно в VCL работать с динамическими массива любого типа? Это сообщение отредактировал(а) Alca - 23.3.2009, 17:38 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
успокойся, это НЕОПАСНО. Можно использовать VCL и STL вместе. И с boost можно. Никаких противопоказаний нет. Требования к VCL классам такиеже как и к обычным классам при использовании с STL. Другое дело, что в лит-ре встречаются рекомендации наподобии: "если Вы используете какую-то библиотеку, то пользуйтесь ею по-максимуму" т.е. если вы пользуетесь VCL, то используйте ее динамический массив (совсем необязательно TList, который нешаблонный и хранит указатели и нужно кастить). В VCL есть вроде как шаблонные классы что-то типа DynamicArray<> и они вполне адекватная альтернатива STL. Логика тут такая : если можно обойтись одной библиотекой, то зачем использовать две... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Имхо, этот в вопрос лучше задать в ветке по борланду. интуитивно предполагаю, что это должен быть TArray<> Это сообщение отредактировал(а) mes - 23.3.2009, 17:54 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
ИМХО
STL входит в стандарт языка (думаю boost тоже войдет). Касаемо других библиотек - согласен. Но STL - это уж вроде как незыблемо. А вот аналога vector я в VCL не знаю, если честно. А в MFC (CLR) есть? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |