|
|
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Есть объект-компонент А. В его конструкторе создаётся, другой, глобальный компонент В. Этот компонент уничтожается не одновременно с А, а после выполнения определённых не суть каких действий. В должен как-то знать, что А уничтожен и уничтожаться только при этом условии. Увидел такую возможность для отслеживания уничтожения объекта А объектом В в tag B записываем объектную ссылку А, т.е.: В.Tag := Integer(A). Сразу после уничтожения А разность В.Tag - Pointer(B.Tag)^ = 4. Вопрос в том, безопасно ли пользоваться таким признаком как раз для сабжа. Может ли значение по адресу Тag перезаписаться в интервале между уничтожением А и проверкой (В.Tag - Pointer(B.Tag)^ = 4) и тогда 4 не получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 01:46 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Для подобных действий придумали Нотификацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 01:53 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Jagare, может, в конец деструктора A просто добавить код Код: pascal 1. Тогда B точно будет знать, что A ничтожен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 01:57 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
DimaBr, в смысле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 02:01 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эра, ну да, в принципе. Только лишний раз присвоение надо делать. При создании не ноль и при уничтожении А 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 02:03 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
JagareDimaBr, в смысле? В коромысле !!! Код: pascal 1. 2. Извещает владельца о том, что он вставлен в список Components метода или удален из него. Этот метод не предназначен для непосредственного вызова из программы. Код: pascal 1. Требует уведомить компонент AComponent о разрушении данного компонента. Код: pascal 1. Удаляет компонент AComponent из списка внешних компонентов, которые он должен извещать о своем уничтожении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 02:09 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
DimaBr, это круто! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 02:14 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 02:29 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
YuRock, зато какие основательные! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 02:34 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Всё-таки, что по вопросу в стартовом посте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 10:15 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Вдохновился этим , можно пользоваться,но: 1. Как подавить сообщение аксесс вайолейшн? добавление on eaccessviolation do не спасает. 2. Можно ли опять же быть уверенным, что на тот же адрес не встанет другой объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 10:44 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Какая-то кривая архитектура относительно владения. А вообще для этого придуман механизм подписок, о частном случае которого упомянул DimaBr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 12:55 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
JagareЕсть объект-компонент А. В его конструкторе создаётся, другой, глобальный компонент В. Начнем с того, что если компонент В глобальный, он не должен создаваться в конструкторе компонента А. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 12:57 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
КвейдНачнем с того, что если компонент В глобальный, он не должен создаваться в конструкторе компонента А. Да нет, отложенная инициализация глобальных объектов это нормально. Ненормально это желание их уничтожать раньше, чем объекты, их использующие. То есть объект В ни в коем случае не должен умереть раньше объекта А. Или по крайней мере раньше, чем А перестанет в нём нуждаться. Для этого и придумали счётчики ссылок. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 13:27 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, нет же, А создаёт В и умирает раньше, прямо как улюдей в правиле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 22:42 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Зачем чтобы А создавал В ? Если В голобальный, то пусть он создаётся при первом обращениее к В Код: pascal 1. 2. 3. 4. 5. 6. 7. и уничтожается в самом конце Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 22:58 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Jagareнет же, А создаёт В и умирает раньше, прямо как улюдей в правиле А при чём тут тогда "В должен как-то знать, что А уничтожен"? Ты уж разберись кто и когда у тебя умирает. А потом внимательно перечитай сообщение выше: автоматически контролируемое время жизни объекта делается при помощи счётчика ссылок. Открой для себя интерфейсы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 23:01 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Если сделал Код: pascal 1. То объект умрёт с формой вместе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 23:36 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Jagareобъект-компонент А. В конструкторе создаётся, другой, глобальный компонент В А если будет ДВА компонента А, то они оба создадут глобальный компонент В ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2018, 23:51 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Действительно, теперь пора вам изучить. Чем отличается TClass от TObject ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2018, 00:03 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, B для того и глобальный и сам себе хозяин, что он не должен умирать одновременно с создателем А, но только после его смерти. Ибо дети наши, не собственность наша и не следует им умирать вместе с нами аминь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2018, 14:44 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
JagareB для того и глобальный и сам себе хозяин, что он не должен умирать одновременно с создателем А, но только после его смерти. Сам себе противоречишь. Определись-таки: он "сам себе хозяин" или "не должен умирать раньше создателя". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2018, 14:48 |
|
||
|
Использование объектной ссылки для отслеживания его уничтожения.
|
|||
|---|---|---|---|
|
#18+
JagareЕсть объект-компонент А. В его конструкторе создаётся, другой, глобальный компонент В. Этот компонент уничтожается не одновременно с А, а после выполнения определённых не суть каких действий. В должен как-то знать, что А уничтожен и уничтожаться только при этом условии. Увидел такую возможность для отслеживания уничтожения объекта А объектом В в tag B записываем объектную ссылку А, т.е.: В.Tag := Integer(A). Сразу после уничтожения А разность В.Tag - Pointer(B.Tag)^ = 4. Вопрос в том, безопасно ли пользоваться таким признаком как раз для сабжа. Может ли значение по адресу Тag перезаписаться в интервале между уничтожением А и проверкой (В.Tag - Pointer(B.Tag)^ = 4) и тогда 4 не получится? https://refactoring.guru/ru/design-patterns/observer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2018, 16:10 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39734866&tid=2040105]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
143ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 451ms |

| 0 / 0 |
