![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
У меня вопрос к уважаемому сообществу: зачем нужны динамические массивы, если в них нельзя положить экземпляр класса? Речь про динамические массивы встроенные в язык, которые array of.
|
|
#2
|
||||
|
||||
|
не совсем понял что с ними нельзя сделать
![]() |
|
#3
|
||||
|
||||
|
Код:
var obj: array of TObject; begin SetLength(obj, 1); obj[0] := TList.Create; end. ЧЯДНТ? |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
||||
|
||||
|
Цитата:
Последний раз редактировалось madMonia, 25.03.2014 в 19:17. |
|
#6
|
||||
|
||||
|
У массивов и списков для объектов разный уровень абстракции.
|
|
#7
|
||||
|
||||
|
аа, я понял, вы хотели не ссылки на объекты, но сами объекты в массивы складывать? Но в делфи вы нигде напрямую с объектами не работаете. И мне кажется это к лучшему, потому что из-за этой двойственности один гемор. Особенно в случае динамических массивов
![]() |
|
#8
|
||||
|
||||
|
Цитата:
|
|
#9
|
||||
|
||||
|
Ну зачем сразу запрет. array, по идеи, часть синтаксиса, и позволяет формально задавать массив чего угодно. Как он будет работать - проблемы программиста. Тут нет особого смысла задавать доп. ограничения, т.к. идея массива - просто блок совершенно произвольных данных.
TList же - фактически является сторонним по отношению к языку расширением. То есть можно сделать компилятор паскаля, который будет компилировать чистый pas, но не будет иметь сторонних библиотек (или будет иметь другие). Уверен, в стандарте паскаля (если он конечно имеется ) не прописано TList'а. Зато TList имеет полезные ништяки типа Add.Ну а зачем TObjectList - понятно. |
|
#10
|
|||
|
|||
|
Ну вот тебе пример использования динамического массива с объектами. Пусть некоторый компонент отображает список некоторых объектов, в т.ч. управляя временем их жизни. У этого компонента есть специальный метод (св-во, что еще), который возврящает список выделенных пользователем объектов. Вот тебе применение для динамического массива. Немного притянуто за уши, но вполне работоспособная схема.
|
|
#11
|
||||
|
||||
|
Я, например, активно использую динамические массивы для хранения чисел, строчек, буквочек. Вопрос: "а зачем они (массивы) нужны" считаю какам-то надуманным.
Цитата:
|
|
#12
|
||||
|
||||
|
Отвечу сразу всем, без цитат.
Сабжевый вопрос у меня возник после регулярного просмотра форумов по программированию на Паскале/Delphi, где новички или пытаются использовать динамические массивы (не всегда корректно, на мой взгляд), или им советуют их использовать, а библиотеки контейнеров VCL/LCL остаются за рамками советов. При этом на уровне кода только статические массивы не влекут дополнительных накладных расходов, придавая тип непрерывным блокам памяти, а динамические массивы уже реализованы библиотечными функциями, незаметно вставляемыми компилятором в код. Код этих функций никак не пересекается с реализацией TList и TStrings, там эта функциональность фактически продублирована. Есть подозрение, что это результат работы разных групп программистов, своего рода "придумано не нами" в рамках одной компании, типа ATL и MFC, но в Delphi. Историю не копал, утверждать не могу. Тем не менее, простой запрет был бы вполне логичен, заставляя для ОО-типов пользоваться ОО-контейнерами. Быдлокода стало бы хоть чуть-чуть меньше, -- и в Интернете, и IRL. |
|
#13
|
||||
|
||||
|
Цитата:
![]() |
|
#14
|
||||
|
||||
|
запретить array of TObject, будут использовать array of Integer и приводить TObject (Pointer) к Integer перед присвоением элементу
![]() |
|
#15
|
||||
|
||||
|
Цитата:
|