Поиск:

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


Опытный
**


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

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



Цитата(mes @  27.2.2011,  17:59 Найти цитируемый пост)
однозначно..  три нижние вобще непонятно зачем нужны..

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

Цитата(mes @  27.2.2011,  17:59 Найти цитируемый пост)
а Loads просто сделайте членом класса Form.

А чем глобальная переменная отличается от члена класса Form? В этом есть, конечно, определенное удобство (легкий доступ ко всем элементам формы), но проблемы выделения памяти не решает. Какая разница где будет память резервироваться - в глобальной переменной или в переменной формы...

Цитата(mes @  27.2.2011,  17:59 Найти цитируемый пост)
и динамическое создание ему вообще не нужно.. т.е. указатель не нужен..

Опять же, вы просто не знаете какую задачу решаю, а уже делаете выводы) Объектов класса GLoads может быть один, а может быть десять, а может и сто. И как тут быть без динамического выделения памяти?
PM MAIL   Вверх
mes
Дата 27.2.2011, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Нитонисе @  27.2.2011,  17:13 Найти цитируемый пост)
А чем глобальная переменная отличается от члена класса Form?

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

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

Цитата(Нитонисе @  27.2.2011,  17:13 Найти цитируемый пост)
Объектов класса GLoads может быть один, а может быть десять, а может и сто

std::vector для этого smile

Цитата(Нитонисе @  27.2.2011,  17:13 Найти цитируемый пост)
Вы так говорите только потому что не знаете что это за объекты и для чего они собственно нужны.

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




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


Опытный
**


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

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



Цитата(mes @  27.2.2011,  18:41 Найти цитируемый пост)
std::vector для этого

Предлагаете хранить в векторе сами объекты?) Если объектов будет 100 и мне понадобится передать его в функцию в качестве аргументов, то как будет быстрее - при хранении указателей или самих объектов?

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


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


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

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



Цитата(Нитонисе @  27.2.2011,  17:56 Найти цитируемый пост)
, то как будет быстрее - при хранении указателей или самих объектов?

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

но еще раз повторю.. забудьте про скорость.. тут Вы ничего существенного не выйграете.. а вот читабельность загубите.. сами потом не найдете что к чему.. 





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


Опытный
**


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

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



Цитата(mes @  27.2.2011,  19:04 Найти цитируемый пост)
но еще раз повторю.. забудьте про скорость..

Для меня это один из критериев, по которому я оцениваю хороша программа или плоха. Если бы у меня было две программы, скажем, обычного калькулятора, один из которых производит вычисления мгновенно, а второй с задержкой в 5 секунд, то я ничтоже сумняшеся куплю первую программу) 
Читабельность кода тоже важна, а указатели код практически не портят. Во всяком случае для меня отличи незначительны. Мне даже удобнее работать с ->, чем с точкой. Индивидуальное восприятие.
Ну а что касается вектора, который не приспособен для хранения указателей... справляется он с этим неплохо) Да к тому же абстрактные классы не могут иметь экземпляров, посему кроме как используя указатели и не обойтись.
Вобщем это уже больше вопросы философии программирования. Кому-то по душе одно, кому-то другое, исключая объективные ситуации, когда правильное решение существует в единственном числе. Но если вы мне скажете, что серьезные программисты не используют вектора для для хранения указателей, то я очень удивлюсь, потому как во многих книжках по С++ эти самые серьезные программисты приводят именно такие примеры.
PM MAIL   Вверх
mes
Дата 27.2.2011, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Нитонисе @  27.2.2011,  18:26 Найти цитируемый пост)
один из которых производит вычисления мгновенно, а второй с задержкой в 5 секунд,

Цитата(mes @  27.2.2011,  18:04 Найти цитируемый пост)
Вы ничего существенного не выйграете.. 

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

Добавлено через 4 минуты и 45 секунд
Цитата(Нитонисе @  27.2.2011,  18:26 Найти цитируемый пост)
, а указатели код практически не портят.

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

Добавлено через 6 минут и 12 секунд
Цитата(Нитонисе @  27.2.2011,  18:26 Найти цитируемый пост)
Да к тому же абстрактные классы не могут иметь экземпляров, посему кроме как используя указатели и не обойтись.

1. а ссылки на что ?
2. GLoads тоже абстрактный ?!

Добавлено через 7 минут и 12 секунд
Цитата(Нитонисе @  27.2.2011,  18:26 Найти цитируемый пост)
Мне даже удобнее работать с ->, чем с точкой. Индивидуальное восприятие.

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

Добавлено через 8 минут и 18 секунд
Цитата(Нитонисе @  27.2.2011,  18:26 Найти цитируемый пост)
Ну а что касается вектора, который не приспособен для хранения указателей... справляется он с этим неплохо) 

понятно,  утечки памяти Вас не беспокоят smile



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


Опытный
**


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

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



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

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

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

Ну вам портят, а мне - нет  smile 

Цитата(mes @  27.2.2011,  19:31 Найти цитируемый пост)
1. а ссылки на что ?

std::vector<GLoad&> Loads? (GLoad - абстрактный класс)

Цитата(mes @  27.2.2011,  19:31 Найти цитируемый пост)
2. GLoads тоже абстрактный ?!

Нет, не абстрактный. Преимущества работы с указателями (преимущества для меня) я уже описал выше)
PM MAIL   Вверх
mes
Дата 27.2.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Нитонисе @  27.2.2011,  18:26 Найти цитируемый пост)
 Но если вы мне скажете, что серьезные программисты не используют вектора для для хранения указателей, то я очень удивлюсь, потому как во многих книжках по С++ эти самые серьезные программисты приводят именно такие примеры. 

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


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


Опытный
**


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

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



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

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


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


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

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



Цитата(Нитонисе @  27.2.2011,  18:42 Найти цитируемый пост)
std::vector<GLoad&> Loads? (GLoad - абстрактный класс)

нет..я не про эти указатели говорил.. smile
тут нужeн враппер например shared_ptr..

Добавлено @ 19:55
Цитата(Нитонисе @  27.2.2011,  18:43 Найти цитируемый пост)
Хотите пример? 

ну приводите, посмотрим чем Ваш пример особенный smile

Добавлено @ 19:59
наверно Вы не до конца поняли 
Цитата(mes @  27.2.2011,  18:43 Найти цитируемый пост)
используют , но не для хранения объектов через указатели..  


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

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


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


Опытный
**


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

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



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

А, ну так понятное дело. 

Вот пример из книги Р.Лафоре "Объектно-ориентированное программирование" 4-е издание:

user posted image

Это объявление класса для программы организации домовладельческого бизнеса. Данный класс отвечает за хранение списка жильцов.
Как видите в контейнере хранятся указатели. Да и итератор представлен членом класса.
PM MAIL   Вверх
mes
Дата 27.2.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Нитонисе @  27.2.2011,  19:19 Найти цитируемый пост)
Вот пример из книги 

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

ну а насчет итератора, как и другого кода (специально посмотрел в поиске) увы.. оставляет желать лучшего.. уровень 90х годов.. 




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


Опытный
**


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

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



Цитата(mes @  27.2.2011,  21:02 Найти цитируемый пост)
поменяйте comparetenants, чтоб вместо простого сравнения указателей сравнивала бы например по имени.. потенциальная утечка обеспечена

Не совсем понял о чем вы... compareTenants сравнивает жильцов по нужному параметру, будь-то имя, фамилия или стоимость аренды, не суть важно. Важно то, что операция сравнения никак не может привести к утечке памяти. Там ведь не происходит удаления, добавления или перенаправления указателей. Просто считывается информация и меняются местами указатели.

Цитата(mes @  27.2.2011,  21:02 Найти цитируемый пост)
ну а насчет итератора, как и другого кода (специально посмотрел в поиске) увы.. оставляет желать лучшего.. уровень 90х годов..

Мне бы достичь уровня Р.Лафоре - я был бы безмерно счастлив, несмотря на то что, это уровень 90-ых годов  smile Вообще отличная книга. Простая и доступная. Издание, кстати, 2004 года.

Это сообщение отредактировал(а) Нитонисе - 27.2.2011, 21:10
PM MAIL   Вверх
mes
Дата 27.2.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Нитонисе @  27.2.2011,  20:09 Найти цитируемый пост)
Не совсем понял о чем вы.

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

Цитата(Нитонисе @  27.2.2011,  20:09 Найти цитируемый пост)
Издание, кстати, 2004

токое ощущение что все таки в 95м- 96м.. а в 2004 может просто переиздалась... сейчас погуглю.. 




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


Эксперт
****


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

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



Ваш спор превращается в религиозный. Можно опрос организовать - и думаю будет примерно 40 на 40 процентов- тех кто принципиально не использует в векторе указатели и те кто принципиально использует только указатели.

А оставшиеся 20 - делают и так и так в зависимости от задачи.

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

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

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

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

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


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

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


 




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


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

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