|
|
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#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. Вот его добавление в дженерик типа TObjectList: В чём моя вина? Я хочу чтобы TObjectList уничтожал свои айтемы как следует. Для того и написал ObjList := TObjectList<TMyObject>.Create( True ). Что на самом деле он творит? Чего я не понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:28 |
|
||
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#18+
JagareВ чём моя вина? Я хочу чтобы TObjectList уничтожал свои айтемы как следует. Для того и написал ObjList := TObjectList<TMyObject>.Create( True ). Что на самом деле он творит? Чего я не понимаю? Вина в том, что TObjectList ничего не знает про переменную TMyObj и, соответственно, после ObjList.Clear она становится не валидной, но пока в другом месте программы этот участок памяти не будет использован повторно, то по адресу в ней будут лежать данные исходного объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:36 |
|
||
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#18+
alekcvp, то есть всё в порядке, память свободна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:41 |
|
||
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#18+
Jagarealekcvp, то есть всё в порядке, память свободна? Какая версия дельфей? Если новая (XE+), то в проекте первой строчкой вставьте Код: pascal 1. и запустите программу, тогда в конце она скажет - свобдона или нет. Если дельфи старая, то надо скачать и подключить к проекту FastMM и потом то же самое. Вкратце: да, память свободная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:44 |
|
||
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#18+
Туплю, там же дженерики :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:44 |
|
||
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#18+
Jagare, если у TObjectList OwnsObjects стоит true, то при вызове методов удаления объектов TObjectList будет вызывать деструктор объектов, добавленных в него. Это вы легко можете проверить, поставив брейкпоит в деструкторе объекта TMyObject. То, что переменная не nil, так её в этот nil никто не установил. Jagareто есть всё в порядке, память свободна? Да. FreeAndNil(MyObj) не нужно вызывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:49 |
|
||
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#18+
Jagare, авторЧего я не понимаю? скорее всего ты видишь мусор разрушенного объекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:51 |
|
||
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#18+
alekcvp, так: Код: pascal 1. 2. 3. 4. 5. 6. 7. Так сделал, ничего не говорит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:52 |
|
||
|
Фокусы от TObjectList
|
|||
|---|---|---|---|
|
#18+
Все впорядке, просто отдельная ссылка на объект указывает на память, которую еще не успели засорить. Кстати, true в create можно не писать. Clear перед freeandnil можно не вызывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 12:52 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39734060&tid=2040121]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 469ms |

| 0 / 0 |
