![]() |
|
![]() ![]() ![]() |
|
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
нда.. прошу "принципиальных" сразу исключить из опроса.. ибо на их мнение нельзя ориентироваться.. Добавлено @ 21:48 есть как минимум два подхода к решению задачи простой структурный и объектно-ориентированный.. второй предоставляет большую безопасность, так как позволяет больше автоматизации.. поэтому в С++ разумно использовать именно его.. надеюсь в этом аспекте нет несогласных ? так вот при оо-подходе использовать ручной контроль за жизнью объектов как минимум муторно и не солидно, не говоря о том, что потенциально опасно.. что сразу расставляет точки над i, при конкретном использовании вектора и при этом без всякого голосования.. Это сообщение отредактировал(а) mes - 27.2.2011, 21:48 |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Обычно причина таких споров - как раз в разном предположении о том что является объектом. Я много раз использовал указатели в векторах - так как мне удобнее читать такой код, но для меня в объектом в таких случаях являлся именно список. И в его деструкторе я само собой убирал мусор. Таким образом вектор являлся частью моего объекта, как правило в защищенной зоне и я не беспокоился ни о каких утечках. Применение автоуказателей для такой вещи слишком накладно с моей точки зрения. В плане рассмотрения вектора как массива более-менее самостоятельных элементов - то тут я применяю что-то вроде автоуказателей, так как действительно муторно за всем этим следить. Как говорится - любое вещество может быть ядом и лекарством - все зависит от дозы. Многие не думая сразу создают вектор объектов string и радуются жизни до тех пор пока не попробуют отсортировать несколько миллионов строк, другие наоборот - создают навороты в виде указателей на структуры в которых всего три int поля... Так что не думаю, что в таком споре кто-то выиграет, выигрывает просто здравый смысл. Я лично запостил свое мнение в основном на эту фразу:
Тут слишком категорично - вектору в общем-то плевать что хранить, другой вопрос он не следит за своим содержимым - указатель это или просто __int64 ему по барабану. Ну а если во всем полагаться на те же автоуказатели и другие мусоросборщики, то скоро весь код будет состоять из оберток и автозачисток, а вот удобоваримая скорость будет отставать безнадежно. Во всем нужна мера. ИМХО. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
если внимательно вчитаетесь в названную фразу :
то можно заметить, что речь шла не об указателях как таковых, а о хранении объектов, посредством сохранения указателя на них.. т.е. о политике владения через указатель.. ![]() но если человек еще не до конца знаком с векторами, то вместо того, чтоб заваливать его кучей информации, проще остеречь от наиболее частых и неочевидных ошибок.. что я и попытался сделать.. ![]() |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Вот ссылка http://www.megaupload.com/?d=MG6587O2 Приведенный мной фрагмент находится на 776 странице (774 дежавюшная). Причем где-то в тексте автор как раз и писал о том, что указатели в контейнерах лучше применять из тех соображений, что нет нужды копировать сами объекты при передачи этих контейнеров в качестве аргументов в функции. Этим экономится время работы программы. Само собой разумеется, что если контейнер будет почти пустым, то с указателями можно не заморачиваться. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Кто знает, а может разок-другой стоит веником пол подмести, чтобы потом оценить достоинства пылесоса? А то ведь сразу с пылесоса, а вдруг электричество отключат - в грязи человек зарастет. А так может быть выработается привычка за собой убирать. Поиск утечек дело противное, но и оно иногда нужное. А то видимо в том же майкрософте вот так все надеются на автоуказатели, а ведь их тоже люди пишут - в итоге утечек полно + тормоза полные. Ну и коль мы в билдеровсеом форуме - поделюсь своей страшной тайной, мне намного больше нравится VCL-овский тип TList - гораздо больше чем STL-овский vector. Он то как раз только указатели хранить и умеет. Почему больше нравится не знаю - он как-то человечнее что-ли. А скорость работы практически одинаковая. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
ах да забыл.. гугль выдал, что первое издание датировано 98 годом.. что в принципе как раз соответствует ожиданиям.. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Библия учит - не сотвори себе кумира. У меня есть очень древнее издание Страуструпа (одно из первых). Там многие примеры приведены достаточно сомнительные, но это никак не умаляет авторитет Страуструпа как и не делает его кумиром - человек все-таки. Лафоре - также, можно какие-то его подходы принять, какие-то нет, но главное - он действительно помогает научиться, как и Страуструп. И если думать головой, то все будет нормально, а если не думать - то никакая автоматика не поможет, утечка начинается из головы программиста. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
shared_ptr как раз позволяет не копировать объекты, и при этом не париться с удалением.. но к сожалению он только в новых компиляторах (или бусте и других альтернативных библиотеках).. но с другой стороны если тип объемный для копирования можно и вручную реализовать для него обертку.. зато потом расслабившись и перекинув на него груз ответсвенности спокойно решать другие задачи.. еще для избавления лишних копирований есть идеология CoW (CopyOnWrite) - которая копирует объект, только при внесении в него изменений.. в остальном фактически идет просто передача указателя.. некоторые реализации std::string реализованны с ее применением.. это я к тому, что автоматические политики хранения, дают фору ручным... ![]() Добавлено @ 22:59
я где то высказался плохо о Лафоре?.. учитывая год написания книга вполне адекватная для того времени.. Нужно просто принять, что многое из написанного из категории "так уже не делают" и для ориентира все ж подглядывать в более современные издания.. Это сообщение отредактировал(а) mes - 27.2.2011, 23:03 |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Зато с вектором идет огромный набор собственных полезных функций и общих STL-алгоритмов. У TList тоже полезностей немало, но чисто умозрительно вектор значительно мощнее. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
Это к чему ? если думаешь, то надо обходится без автоматики ? или я где то сказал, что автоматика заменяет голову ? я говорил лишь о том , что она снимает некий груз, если ее с умом применить.. |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
вряд ли приходят такие идеи для голых указателей, объекты для которых создаются "снаружи".. вот для заметки, (первое что нашел, но по теме) : http://blog.alno.name/ru/2008/05/using-boost-smart-pointers |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
грубо, это либа на которой идет "испытание" полезностей, прежде чем появиться в стандарте ![]() в современных компиляторах часть упомянутых вкусностей уже реализована, как часть стандарта.. Это сообщение отредактировал(а) mes - 27.2.2011, 23:55 |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |