|
|
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
Что-то я потерялся Если я правильно понял, то [WEAK] переменные - это такие особые переменные (объекты), которые обнуляются в случае вызова деструктора где-либо. В связи с этим есть отдельный менеджер WEAK-ссылок. Мягкие ссылки работают либо в NEXTGEN, либо в обычном компиляторе, начиная с Berlin-а. Что я делаю не так? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2018, 21:54 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Weak работает только в NextGen и от обычной ссылки на объект отличается тем, что не изменяет счетчик ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2018, 21:56 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, В берлине weak ссылки работают только с интерфейсами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2018, 22:30 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
ziv-2014, Ты уверен? Потому что деструктор интерфейса в общем случае невозможно перехватить Дабы зачистить Weak-ссылки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2018, 22:53 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Мое сугубое мнение, чисто теоретически-гипотетически. Пока жива локальная переменная Obj, будет жить и адрес на неё. Следовательно, удаляй в одной процедуре, а проверяй в другой, когда уже obj будет уничтожена Это ведь ссылки, а значит не может удалится в пункте А пока есть в Б ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2018, 02:18 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Уверен. Никто деструктор не перехватывает. Сделано через магические процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2018, 11:09 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Да и не зачищают они weak ссылки. При ссылке на переменную со слабой ссылкой, счетчик не увеличивается. А указатель может оставаться не очищенным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2018, 11:11 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
Не понимаю Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Атрибутов нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2018, 14:26 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Потому что надо так: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2018, 18:44 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
Давайте соотнесём наши знания о Weak-ссылках Судя по System._FinalizeRecord, под Weak логику подпадает 3 типа: 1. TObject - дифайн WEAK INST REF - присвоение InstWeakCopy --> RegisterWeakRef --> добавить ссылку из хеш таблицы - очистка InstWeakClear --> UnregisterWeakRef --> удалить ссылку из хеш таблицы - в деструкторе TObject/TInterfacedObject --> CleanupInstance --> TInstHashMap.Destroy --> TInstItem.ClearWeakRefs --> обнулить все поля, связанные с ссылкой 2. function of object - дифайн WEAK INST REF - присвоение CopyClosure --> RegisterWeakMethodRef - очистка ClosureRemoveWeakRef --> ClosureRemoveWeakRef 3. IInterface - дифайн WEAK INTF REF - присвоение --> InstWeakCopy --> RegisterWeakRef - очистка --> InstWeakClear --> UnregisterWeakRef Получается, мягкие ссылки - это не просто переменные, которые инициализируются обычным указателем. Это сложный указатель, который обнуляется при деструкторе и оригинального объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2018, 20:03 |
|
||
|
Weak attribute
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, судя по этой ссылке: Conditional_compilation weak не работает на винде от слова совсем (максимум просто не увеличивают счетчик у интерфейса, как у const параметра функции). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 13:50 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=109&tid=2040921]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
65ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 344ms |

| 0 / 0 |
