Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вернуть из функции указатель на объект 
V
    Опции темы
mes
Дата 27.2.2011, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Anikmar @  27.2.2011,  20:21 Найти цитируемый пост)
 тех кто принципиально не использует в векторе указатели и те кто принципиально использует только указатели.

нда.. прошу "принципиальных" сразу исключить из опроса.. ибо на их мнение нельзя  ориентироваться..

Добавлено @ 21:48
Цитата(Anikmar @  27.2.2011,  20:21 Найти цитируемый пост)
А оставшиеся 20 - делают и так и так в зависимости от задачи.

есть как минимум два подхода к  решению задачи простой структурный и объектно-ориентированный.. 
второй предоставляет большую безопасность, так как позволяет больше автоматизации..

поэтому в С++ разумно использовать именно его.. надеюсь в этом аспекте нет несогласных ? 

так вот при оо-подходе использовать ручной контроль за жизнью объектов как минимум муторно и не солидно, не говоря о том, что потенциально опасно.. что сразу расставляет точки над i, при конкретном использовании вектора и при этом без всякого голосования.. 

Это сообщение отредактировал(а) mes - 27.2.2011, 21:48


--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 27.2.2011, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(mes @  27.2.2011,  21:37 Найти цитируемый пост)
так вот при оо-подходе использовать ручной контроль за жизнью объектов как минимум муторно и не солидно


Обычно причина таких споров - как раз в разном предположении о том что является объектом. 
Я  много раз использовал указатели в векторах - так как мне удобнее читать  такой код, но для меня в объектом в таких случаях являлся именно список. И в его деструкторе я само собой убирал мусор. Таким образом вектор являлся частью моего объекта, как правило в защищенной зоне и я не беспокоился ни о каких утечках. Применение автоуказателей для такой вещи слишком накладно с моей точки зрения.

В плане  рассмотрения вектора как массива более-менее самостоятельных элементов - то тут я применяю что-то вроде автоуказателей, так как действительно муторно за всем этим следить.

Как говорится - любое вещество может быть ядом и лекарством - все зависит от дозы. Многие не думая сразу создают вектор объектов string и радуются жизни до тех пор пока не попробуют отсортировать несколько миллионов строк, другие наоборот - создают навороты в виде указателей на структуры в которых всего три int поля...

Так что не думаю, что в таком споре кто-то выиграет, выигрывает просто здравый смысл.

Я лично запостил свое мнение в основном на эту фразу:

Цитата(mes @  27.2.2011,  19:04 Найти цитируемый пост)
 к тому же вектор не предназначен для хранения объектов посредством указателей на них..

Тут слишком категорично -  вектору в общем-то плевать что хранить, другой вопрос он не следит за своим содержимым - указатель это или просто __int64 ему по барабану.

Ну а если во всем полагаться на те же автоуказатели и другие мусоросборщики, то скоро весь код будет состоять из оберток и автозачисток, а вот удобоваримая скорость будет отставать безнадежно. Во всем нужна мера. ИМХО.

PM MAIL ICQ   Вверх
mes
Дата 27.2.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Anikmar @  27.2.2011,  21:08 Найти цитируемый пост)
Я лично запостил свое мнение в основном на эту фразу:

Цитата(Anikmar @  27.2.2011,  21:08 Найти цитируемый пост)
вектору в общем-то плевать что хранить

если внимательно вчитаетесь в названную фразу :
Цитата

 к тому же вектор не предназначен для хранения объектов посредством указателей на них.

то можно заметить, что речь шла не об указателях как таковых, а о хранении объектов, посредством сохранения указателя на них..
т.е. о политике владения через указатель.. 

Цитата(Anikmar @  27.2.2011,  21:08 Найти цитируемый пост)
 выигрывает просто здравый смысл.

 smile 
но если человек еще не до конца знаком с векторами, то вместо того, чтоб заваливать его кучей информации, проще остеречь от наиболее частых и неочевидных ошибок.. что я и попытался сделать.. 
smile


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 27.2.2011, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  27.2.2011,  21:20 Найти цитируемый пост)
токое ощущение что все таки в 95м- 96м.. а в 2004 может просто переиздалась... сейчас погуглю..

Вот ссылка http://www.megaupload.com/?d=MG6587O2
Приведенный мной фрагмент находится на 776 странице (774 дежавюшная). Причем где-то в тексте автор как раз и писал о том, что указатели в контейнерах лучше применять из тех соображений, что нет нужды копировать сами объекты при передачи этих контейнеров в качестве аргументов в функции. Этим экономится время работы программы. Само собой разумеется, что если контейнер будет почти пустым, то с указателями можно не заморачиваться.
PM MAIL   Вверх
Anikmar
Дата 27.2.2011, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(mes @  27.2.2011,  22:29 Найти цитируемый пост)
но если человек еще не до конца знаком с векторами, то вместо того, чтоб заваливать его кучей информации, проще остеречь от наиболее частых и неочевидных ошибок.. что я и попытался сделать.. 


Кто знает, а может разок-другой стоит веником пол подмести, чтобы потом оценить достоинства пылесоса? А то ведь сразу с пылесоса, а вдруг электричество отключат - в грязи человек зарастет. А так может быть выработается привычка за собой убирать.

Поиск утечек дело противное, но и оно иногда нужное. А то видимо в том же майкрософте вот так все надеются на автоуказатели, а ведь их тоже люди пишут - в итоге утечек полно + тормоза полные.

Ну и коль мы в билдеровсеом форуме - поделюсь своей страшной тайной, мне намного больше нравится VCL-овский тип TList - гораздо больше чем STL-овский  vector. Он то как раз только указатели хранить и умеет. Почему больше нравится не знаю - он как-то человечнее что-ли. А скорость работы практически одинаковая.
PM MAIL ICQ   Вверх
mes
Дата 27.2.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата
сейчас погуглю..

ах да забыл.. гугль выдал, что первое издание датировано 98 годом.. 
что в принципе как раз соответствует ожиданиям.. 




--------------------
PM MAIL WWW   Вверх
Anikmar
Дата 27.2.2011, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Нитонисе @  27.2.2011,  21:09 Найти цитируемый пост)
Мне бы достичь уровня Р.Лафоре - я был бы безмерно счастлив, несмотря на то что, это уровень 90-ых годов   Вообще отличная книга. Простая и доступная. Издание, кстати, 2004 года.


Цитата(mes @  27.2.2011,  22:44 Найти цитируемый пост)
ах да забыл.. гугль выдал, что первое издание датировано 98 годом.. 
что в принципе как раз соответствует ожиданиям.. 


Библия учит - не сотвори себе кумира. У меня есть очень древнее издание Страуструпа (одно из первых). Там многие примеры приведены достаточно сомнительные, но это никак не умаляет авторитет Страуструпа как и не делает его кумиром - человек все-таки. Лафоре - также, можно какие-то его подходы принять,  какие-то нет, но главное - он действительно помогает научиться, как и Страуструп. И если думать головой, то все будет нормально, а если не думать - то никакая автоматика не поможет, утечка начинается из головы программиста.


PM MAIL ICQ   Вверх
mes
Дата 27.2.2011, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  27.2.2011,  21:31 Найти цитируемый пост)
то указатели в контейнерах лучше применять из тех соображений, что нет нужды копировать сами объекты при передачи этих контейнеров в качестве аргументов в функции. Этим экономится время работы программы. Само собой разумеется, что если контейнер будет почти пустым, то с указателями можно не заморачиваться. 

shared_ptr как раз позволяет не копировать объекты, и при этом не париться с удалением.. но к сожалению он только в новых компиляторах (или бусте и других альтернативных библиотеках).. но с другой стороны если тип объемный для копирования можно и вручную реализовать для него обертку.. зато потом расслабившись и перекинув на него груз ответсвенности спокойно решать другие задачи.. 

еще для избавления лишних копирований есть идеология CoW (CopyOnWrite) - которая копирует объект, только при внесении в него изменений..  в остальном фактически идет просто передача указателя.. некоторые реализации std::string реализованны с ее применением.. 

это я к тому, что автоматические политики хранения, дают фору ручным... 
smile

Добавлено @ 22:59
Цитата(Anikmar @  27.2.2011,  21:51 Найти цитируемый пост)
 Там многие примеры приведены достаточно сомнительные, но это никак не умаляет авторитет Страуструпа как и не делает его кумиром - человек все-таки

я где то высказался плохо о Лафоре?.. учитывая год написания книга вполне адекватная для того времени..
Нужно просто принять, что многое из написанного из категории "так уже не делают" и для ориентира все ж подглядывать в более современные издания.. 



Это сообщение отредактировал(а) mes - 27.2.2011, 23:03


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 27.2.2011, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(Anikmar @  27.2.2011,  22:43 Найти цитируемый пост)
Ну и коль мы в билдеровсеом форуме - поделюсь своей страшной тайной, мне намного больше нравится VCL-овский тип TList - гораздо больше чем STL-овский  vector. Он то как раз только указатели хранить и умеет. Почему больше нравится не знаю - он как-то человечнее что-ли. А скорость работы практически одинаковая.

Зато с вектором идет огромный набор собственных полезных функций и общих STL-алгоритмов. У TList тоже полезностей немало, но чисто умозрительно вектор значительно мощнее.
PM MAIL   Вверх
mes
Дата 27.2.2011, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Anikmar @  27.2.2011,  21:51 Найти цитируемый пост)
. И если думать головой, то все будет нормально, а если не думать - то никакая автоматика не поможет, утечка начинается из головы программиста.

Это к чему ? если думаешь, то надо обходится без автоматики ? или я где то сказал, что автоматика заменяет голову ?
я говорил лишь о том , что она снимает некий груз, если ее с умом применить.. 




--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 27.2.2011, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  27.2.2011,  22:54 Найти цитируемый пост)
что многое из написанного из категории "так уже не делают"

Ну ни за что я не поверю, что у современного программиста не возникнет идеи хранить указатели на объекты в векторе вместо самих объектов, при условии что объекты "тяжелые" и их очень много  smile 
PM MAIL   Вверх
mes
Дата 27.2.2011, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  27.2.2011,  22:16 Найти цитируемый пост)
 у современного программиста не возникнет идеи хранить указатели на объекты в векторе вместо самих объектов, при условии что объекты "тяжелые" и их очень много  


вряд ли приходят такие идеи для голых указателей, объекты для которых создаются "снаружи".. 

вот для заметки, (первое что нашел, но по теме) : 
http://blog.alno.name/ru/2008/05/using-boost-smart-pointers



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 27.2.2011, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  27.2.2011,  23:28 Найти цитируемый пост)
вот для заметки, (первое что нашел, но по теме) :

Интересные указатели... это стандарт С++ или какая-то стороння разработка?
PM MAIL   Вверх
mes
Дата 27.2.2011, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  27.2.2011,  22:40 Найти цитируемый пост)
Интересные указатели... это стандарт С++ или какая-то стороння разработка? 

грубо, это либа на которой идет "испытание" полезностей, прежде чем появиться в стандарте smile
в современных компиляторах часть упомянутых вкусностей уже реализована, как часть стандарта..  



Это сообщение отредактировал(а) mes - 27.2.2011, 23:55


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 28.2.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  27.2.2011,  23:55 Найти цитируемый пост)
грубо, это либа на которой идет "испытание" полезностей, прежде чем появиться в стандарте

Я так понимаю она имеется в свободном доступе? И использование этих указателей нынче распространено?
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0954 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.