![]() |
|
![]() ![]() ![]() |
|
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Вы так говорите только потому что не знаете что это за объекты и для чего они собственно нужны. А чем глобальная переменная отличается от члена класса Form? В этом есть, конечно, определенное удобство (легкий доступ ко всем элементам формы), но проблемы выделения памяти не решает. Какая разница где будет память резервироваться - в глобальной переменной или в переменной формы...
Опять же, вы просто не знаете какую задачу решаю, а уже делаете выводы) Объектов класса GLoads может быть один, а может быть десять, а может и сто. И как тут быть без динамического выделения памяти? |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
временем создания.. у глобальных есть один большой минус.. порядок их создания не определен и если есть перекрестные ссылки, то поведение неопределено.. поэтому приходится делать указатель и создавать при загрузке форме.. т.е. сделав членом формы Вам указатель будет не нужен.. вторая причина в масштабируемости, сделав членом вы можете содавать сколько угодно форм у каждой из которых будет свой контекст..
std::vector для этого ![]()
есть только одно объяснение - типо оптимизация.. которое в дальнейшем выйдет боком.. |
||||
|
|||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
хранение в векторе ? указатель лишняя косвенность, а значит лишние расходы, к тому же вектор не предназначен для хранения объектов посредством указателей на них.. но еще раз повторю.. забудьте про скорость.. тут Вы ничего существенного не выйграете.. а вот читабельность загубите.. сами потом не найдете что к чему.. |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Для меня это один из критериев, по которому я оцениваю хороша программа или плоха. Если бы у меня было две программы, скажем, обычного калькулятора, один из которых производит вычисления мгновенно, а второй с задержкой в 5 секунд, то я ничтоже сумняшеся куплю первую программу) Читабельность кода тоже важна, а указатели код практически не портят. Во всяком случае для меня отличи незначительны. Мне даже удобнее работать с ->, чем с точкой. Индивидуальное восприятие. Ну а что касается вектора, который не приспособен для хранения указателей... справляется он с этим неплохо) Да к тому же абстрактные классы не могут иметь экземпляров, посему кроме как используя указатели и не обойтись. Вобщем это уже больше вопросы философии программирования. Кому-то по душе одно, кому-то другое, исключая объективные ситуации, когда правильное решение существует в единственном числе. Но если вы мне скажете, что серьезные программисты не используют вектора для для хранения указателей, то я очень удивлюсь, потому как во многих книжках по С++ эти самые серьезные программисты приводят именно такие примеры. |
|||
|
||||
mes |
|
||||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
а значит какой бы выбрали калькулятор , тот который решает за секунду ? или тот который решает примерно за секунду, но удобный ![]() Добавлено через 4 минуты и 45 секунд портят.. прием по ссылке исключает возможность передачи нулевого объекта, а по указателю перекладывает эту гарантию на программиста.. в добавок работа со стеком эффективнее, чем работа с кучей.. и много еще мелочей о которых вспоминать сейчас лень.. Добавлено через 6 минут и 12 секунд
1. а ссылки на что ? 2. GLoads тоже абстрактный ?! Добавлено через 7 минут и 12 секунд
особенно удобна работа с операторами через указатель, в чем Вы уже успели убедиться.. ![]() Добавлено через 8 минут и 18 секунд
понятно, утечки памяти Вас не беспокоят ![]() |
||||||||
|
|||||||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Случаи бывают разные. Может так оказаться, что я выберу более быструю программу, но менее удобную. Но я не об этом говорю. Я говорю о том, что скорость - это важный параметр. Когда-то более важный, когда-то менее важный, но уж никак не абсолютно ненужный. Ну вам портят, а мне - нет ![]() std::vector<GLoad&> Loads? (GLoad - абстрактный класс) Нет, не абстрактный. Преимущества работы с указателями (преимущества для меня) я уже описал выше) |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
используют , но не для хранения объектов через указатели.. |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
нет..я не про эти указатели говорил.. ![]() тут нужeн враппер например shared_ptr.. Добавлено @ 19:55 ну приводите, посмотрим чем Ваш пример особенный ![]() Добавлено @ 19:59 наверно Вы не до конца поняли она означает, что можно хранить в вектроре, при условии что удалять объекты пользователь должен вручную и при этом сохранить все используемые указателя.. т.е либо к вектору не будут применены операции "теряющие" указатели либо указатели должны быть сохранены в другом месте.. Это сообщение отредактировал(а) mes - 27.2.2011, 20:00 |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
А, ну так понятное дело. Вот пример из книги Р.Лафоре "Объектно-ориентированное программирование" 4-е издание: ![]() Это объявление класса для программы организации домовладельческого бизнеса. Данный класс отвечает за хранение списка жильцов. Как видите в контейнере хранятся указатели. Да и итератор представлен членом класса. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
поменяйте comparetenants, чтоб вместо простого сравнения указателей сравнивала бы например по имени.. потенциальная утечка обеспечена ![]() ну а насчет итератора, как и другого кода (специально посмотрел в поиске) увы.. оставляет желать лучшего.. уровень 90х годов.. |
|||
|
||||
Нитонисе |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Не совсем понял о чем вы... compareTenants сравнивает жильцов по нужному параметру, будь-то имя, фамилия или стоимость аренды, не суть важно. Важно то, что операция сравнения никак не может привести к утечке памяти. Там ведь не происходит удаления, добавления или перенаправления указателей. Просто считывается информация и меняются местами указатели.
Мне бы достичь уровня Р.Лафоре - я был бы безмерно счастлив, несмотря на то что, это уровень 90-ых годов ![]() Это сообщение отредактировал(а) Нитонисе - 27.2.2011, 21:10 |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
в сет добавляются только не совпадающие указатели.. и если проверяться будет, например, по имени, то при попытки добавить новосозданного объекта с именем, который уже имеется в списке, последний будет "потерян".. токое ощущение что все таки в 95м- 96м.. а в 2004 может просто переиздалась... сейчас погуглю.. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Ваш спор превращается в религиозный. Можно опрос организовать - и думаю будет примерно 40 на 40 процентов- тех кто принципиально не использует в векторе указатели и те кто принципиально использует только указатели.
А оставшиеся 20 - делают и так и так в зависимости от задачи. Но в процентаже могу конечно и ошибаться. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ 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. |