|
|
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Собственно, решил попробовать их на вкус. Сделал, как в этом примере сам код Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. результат {1} Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. результат{2} Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Ну и в случае {3}, если не комментить код после finally, то получаю Код: pascal 1. 2. 3. 4. 5. 6. ЧЯДНТ? Я неправильно понимаю их область применения? зы. кстати, компилятор выдал кучу хинтов типа Код: pascal 1. 2. 3. ================= Док. Win7 Ultim x64/Deb 8.7 i386: FB 3.0.2.32703, диалект 3, SS(win)/SC(Deb), Lazarus 1.9(r.55042); FPC 3.1.1 (r.36290), IBX by -Rik-; IBE 2017.4.19.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 17:53:50 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Док ЧЯДНТ? Cоздаёшь единственный объект, а потом удивляешься результату :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 18:01:28 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyДок ЧЯДНТ? Cоздаёшь единственный объект, а потом удивляешься результату :) понятно. А что с разрушением? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 18:06:19 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
ДокА что с разрушением? А чего ты ожидаешь убивая объект несколько раз? (я полагаю TFPGObjectList по дефолту является владельцем хранимых объектов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 18:10:02 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, поправил код Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. теперь с ожидаемым результатом Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Но даже теперь нет понятно, почему уничтожение и объекта, и листа все равно приводит к выше указанной ошибке. Но если их уничтожать по одному за один раз - все корректно? Я хочу уяснить на будущее, если я их не буду уничтожать, то память потечет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 18:26:26 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
ДокНо даже теперь нет понятно, почему уничтожение и объекта, и листа все равно приводит к выше указанной ошибке. Я же тебе уже сказал, что твой лист, скорее всего, сам удаляет хранимые объекты. Параметры конструктора-то посмотри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 18:35:53 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Если ты в этих классах хранишь всего лишь свойства, как информацию о чём либо - то. То лучше использовать структуры, так как их не надо ручками создавать и удалять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 18:40:09 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Док, обычно у таких списков есть свойство "владелец объектов". Оно иногда по умолчанию включено, иногда - выключено, смотри исходники. Это значит, что все, что ты положил в список, будет удалено (вызовом деструктора вложенного объекта) при разрушении списка. Например, ты кнопки на форму кидаешь. Потом, при разрушении формы, кнопки тоже разрушаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 18:43:06 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
https://www.freepascal.org/docs-html/rtl/fgl/tfpgobjectlist.html property FreeObjects: Boolean; [rw] Does the list own the objects or not? Если у тебя list.FreeObjects = True, то, как уже сказали выше, он сам вызывает Free у хранимых объектов при уничтожении списка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 18:53:18 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
alekcvpЕсли у тебя list.FreeObjects = True Kazantsev AlexeyПараметры конструктора-то посмотри. Ага, теперь понятно Няшиклучше использовать структуры Че-та я их не могу понять куда и и как в один из 4 классов (TFPGList, TFPGObjectList, TFPGInterfacedObjectList, TFPGMap), описанных в fgl, их прикрутить. Если создавать свой тип дженерика, как описано в мануале Код: pascal 1. 2. 3. 4. 5. 6. то придется вручную описывать остальные свойства и процедуры. А хотелось бы готовых :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 20:32:03 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Док, вот с "созданием" записей: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Это я с Delphi Tokyo играюсь... какой крутецкий отладчик, все элементы списка видно: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 21:07:30 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
чччД, Тебе не кажется что, создание указателя - это лишние ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 21:48:21 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Кстати, TList<> сам выделяет (и освобождает) память для данных типа <T>, и в данном случае fl.Add(fpR^) - всего лишь копирование значений из временной переменной. Стало быть, в цикле должен быть Dispose этой временной переменной: Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 22:02:13 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
НяшикчччД, Тебе не кажется что, создание указателя - это лишние ? Так Док вроде как раз страдает по этому поводу - куда непонятное заранее количество деть, массив какой-то завёл. А так - да, не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 22:10:51 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
чччДЭто я с Delphi Tokyo играюсь... Вот теперь то же самое, только на Лазаре. "Я посмотрел бы на него, когда б было минус 30..." © :) чччДТак Док вроде как раз страдает по этому поводу Док не страдает, Док изучает, прежде чем сказать, что дженерики на Лазаре гавно до уровня Дельфей еще надо пилить и пилить. Есть сторонняя библиотека , но и там типа TList<TArray> тоже нет. Так что, для моих целей ближе всего все-таки использовать свой класс с полями нужного типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 23:17:45 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Докчто дженерики на Лазаре гавно до уровня Дельфей еще надо пилить и пилить Всё ровно наоборот. Муа-ха-ха. ДокЕсть сторонняя библиотека , но и там типа TList<TArray> тоже нет. Ты же на транке вроде? В транк давно уже спарту интегрировали, подключай Generics.Collections... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2017, 23:46:28 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Док, ну ты скажи, где лазарус взять, чтобы такой, как у тебя и без гемора при установке - я и попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 00:01:52 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
чччДну ты скажи, где лазарус взять легко. Можешь попробовать собрать так . Kazantsev Alexeyподключай Generics.Collections.. и ты молчал? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 00:13:08 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
ДокМожешь попробовать собрать так . Зачем такие сложности... Ходишь сюда , качаешь утиль под свою ОС, устанавливаешь нажатием одной кнопки. Доки ты молчал? :) А ты не те вопросы задаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 00:20:28 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Скачал лазарус отсюда: http://www.lazarus-ide.org/ - нет там файла Generics.Collection ДокчччДну ты скажи, где лазарус взять легко. Можешь попробовать собрать так . ... Да ну, страшно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 00:44:42 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
чччДСкачал лазарус отсюда: http://www.lazarus-ide.org/ - нет там файла Generics.Collection ССЗБ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 00:49:04 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyА ты не те вопросы задаешь Мог бы и подсказать, тем более, что нас, лазаристов, мало :) Вроде разобрался Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. результат Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Еще раз хотел уточнить, FreeAndNil нужно писать или об этом TList<T> позаботится? Будет ли криминалом, если я буду по привычке уничтожать то, что создал своими руками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 01:37:57 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyчччДСкачал лазарус отсюда: http://www.lazarus-ide.org/ - нет там файла Generics.Collection ССЗБ Вот оно мне так надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 01:38:38 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
Док... Еще раз хотел уточнить, FreeAndNil нужно писать или об этом TList<T> позаботится? Будет ли криминалом, если я буду по привычке уничтожать то, что создал своими руками? Если у тебя в список TList<> залиты экземпляры классов - нужно уничтожать руками. Если "простые типы" (целые, строки, записи из целых и строк...) - не нужно уничтожать. Если в записи есть поля "классового" типа ("объекты") - нужно пройтись по всем элементам и уничтожить такие объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 01:42:59 |
|
||
|
Lazarus: дженерики
|
|||
|---|---|---|---|
|
#18+
ДокFreeAndNil нужно писать или об этом TList<T> позаботится? Конкретно TList<T> сам ничего не уничтожает. TObjectList<T> в зависимости от опции владения объектами. ДокБудет ли криминалом, если я буду по привычке уничтожать то, что создал своими руками? Это ортогонально дженерикам. Но вообще, либо уничтожаешь сам, либо поручаешь кому-то, как в том случае со списком-контейнером владеющим объектами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 01:52:21 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39473851&tid=2042106]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 414ms |

| 0 / 0 |
