|
|
|
TObject/TInterfacedObject: __MarkDestroying, __SetDisposed
|
|||
|---|---|---|---|
|
#18+
Всем добрый день Изучаю исходники TObject и TInterfacedObject, не могу понять, зачем в новых Delphi столько рутины, связанной со счётчиком ссылок Зачем это всё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 13:08 |
|
||
|
TObject/TInterfacedObject: __MarkDestroying, __SetDisposed
|
|||
|---|---|---|---|
|
#18+
Голландец, потому что в новых делфи планировалось сделать автоуничтожение объектов (см nextgen compiler) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 13:16 |
|
||
|
TObject/TInterfacedObject: __MarkDestroying, __SetDisposed
|
|||
|---|---|---|---|
|
#18+
ГолландецИзучаю исходники TObject и TInterfacedObject, не могу понять, зачем в новых Delphi столько рутины, связанной со счётчиком ссылок Зачем это всё? Первый добавили чтобы не было повторного входа в деструктор . Хотя можно было просто _addref вставить первым оператором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 13:26 |
|
||
|
TObject/TInterfacedObject: __MarkDestroying, __SetDisposed
|
|||
|---|---|---|---|
|
#18+
Честно говоря не понял Мне кажется всё это пошло от TInterfacedObject В Nextgen судя по всему TObject становится аналогом интерфейса Но для интерфейсов всегда был подсчёт ссылок Может это имеет какое-то отношение к кольцевым ссылкам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 15:52 |
|
||
|
TObject/TInterfacedObject: __MarkDestroying, __SetDisposed
|
|||
|---|---|---|---|
|
#18+
ГолландецНо для интерфейсов всегда был подсчёт ссылок Может это имеет какое-то отношение к кольцевым ссылкам? Насчет кольцевых - вряд ли, их практически невозможно отследить. Проблема в том, что одна сущность должна встраиваться в две разные концепции. Это порождает разные проблемы, в частности с реентерабельностью деструктора. Например, в таком коде Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. без дополнительной защиты возникнет рекурсия, переполнение стека или AV. Но это легко преодолевается. Намного сложнее разрешить проблемы с интерфейсами из внешних библиотек. Если оставить все на самотек, наверняка будет ситуация, когда библиотека будет выгружена, а ссылки останутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 16:21 |
|
||
|
TObject/TInterfacedObject: __MarkDestroying, __SetDisposed
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, Есть логика в твоих словах Но там 2 флага, а не один Кроме того, раньше же как-то жили без них Вот бы толковую документацию почитать на этот счёт :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 17:13 |
|
||
|
TObject/TInterfacedObject: __MarkDestroying, __SetDisposed
|
|||
|---|---|---|---|
|
#18+
Голландец, Со вторым флагом я не разбирался. Рискну предположить, он связан с тем, что в стандартном дельфовом коде создаются скрытые интерфейсные ссылки, которые освобождаются по-разному в зависимости от типа кода. Вероятно через ~20 лет пришло осознание, что это не есть всегда хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2018, 17:33 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39706424&tid=2040385]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 213ms |
| total: | 388ms |

| 0 / 0 |
