powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование объектной ссылки для отслеживания его уничтожения.
23 сообщений из 23, страница 1 из 1
Использование объектной ссылки для отслеживания его уничтожения.
    #39734677
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть объект-компонент А. В его конструкторе создаётся, другой, глобальный компонент В. Этот компонент уничтожается не одновременно с А, а после выполнения определённых не суть каких действий. В должен как-то знать, что А уничтожен и уничтожаться только при этом условии. Увидел такую возможность для отслеживания уничтожения объекта А объектом В в tag B записываем объектную ссылку А, т.е.: В.Tag := Integer(A). Сразу после уничтожения А разность В.Tag - Pointer(B.Tag)^ = 4. Вопрос в том, безопасно ли пользоваться таким признаком как раз для сабжа. Может ли значение по адресу Тag перезаписаться в интервале между уничтожением А и проверкой (В.Tag - Pointer(B.Tag)^ = 4) и тогда 4 не получится?
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734678
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для подобных действий придумали Нотификацию
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734680
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagare,

может, в конец деструктора A просто добавить код
Код: pascal
1.
B.Tag = 0;


Тогда B точно будет знать, что A ничтожен.
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734681
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, в смысле?
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734683
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра, ну да, в принципе. Только лишний раз присвоение надо делать.
При создании не ноль и при уничтожении А 0.
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734685
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JagareDimaBr, в смысле?
В коромысле !!!

Код: pascal
1.
2.
type TOperation = (oplnsert, opRemove);
procedure Notification (AComponent: TComponent;Operation: TOperation); virtual;

Извещает владельца о том, что он вставлен в список Components метода или удален из него. Этот метод не предназначен для непосредственного вызова из программы.

Код: pascal
1.
procedure FreeNotification (AComponent: TComponent);


Требует уведомить компонент AComponent о разрушении данного компонента.

Код: pascal
1.
procedure RemoveFreeNotification (AComponent: TComponent);


Удаляет компонент AComponent из списка внешних компонентов, которые он должен извещать о своем уничтожении.
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734687
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

это круто!
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734689
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эраэто круто!
костыли это
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734690
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

зато какие основательные! :)
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734726
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё-таки, что по вопросу в стартовом посте?
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734732
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдохновился этим , можно пользоваться,но:
1. Как подавить сообщение аксесс вайолейшн? добавление on eaccessviolation do не спасает.
2. Можно ли опять же быть уверенным, что на тот же адрес не встанет другой объект.
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734765
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то кривая архитектура относительно владения. А вообще для этого придуман механизм подписок, о частном случае которого упомянул DimaBr
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734767
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JagareЕсть объект-компонент А. В его конструкторе создаётся, другой, глобальный компонент В.

Начнем с того, что если компонент В глобальный, он не должен создаваться в конструкторе компонента А.
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734775
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдНачнем с того, что если компонент В глобальный, он не должен создаваться в конструкторе
компонента А.

Да нет, отложенная инициализация глобальных объектов это нормально. Ненормально это
желание их уничтожать раньше, чем объекты, их использующие.

То есть объект В ни в коем случае не должен умереть раньше объекта А. Или по крайней мере
раньше, чем А перестанет в нём нуждаться. Для этого и придумали счётчики ссылок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734866
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, нет же, А создаёт В и умирает раньше, прямо как улюдей в правиле
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734870
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем чтобы А создавал В ? Если В голобальный, то пусть он создаётся при первом обращениее к В
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var fB: TObject;

functiob GetB: TObject;
begin
  if fB = nil then fB := TObject.Create;
  Result := fB
end;



и уничтожается в самом конце

Код: pascal
1.
2.
3.
finalization
  FreeAndNill(fB);
end.
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734872
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagareнет же, А создаёт В и умирает раньше, прямо как улюдей в правиле

А при чём тут тогда "В должен как-то знать, что А уничтожен"? Ты уж разберись кто и когда
у тебя умирает. А потом внимательно перечитай сообщение выше: автоматически контролируемое
время жизни объекта делается при помощи счётчика ссылок. Открой для себя интерфейсы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734881
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сделал
Код: pascal
1.
 var MyObject := TButton.create(Form);



То объект умрёт с формой вместе.
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734883
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagareобъект-компонент А. В конструкторе создаётся, другой, глобальный компонент В
А если будет ДВА компонента А, то они оба создадут глобальный компонент В ?
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39734887
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, теперь пора вам изучить. Чем отличается TClass от TObject
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39735149
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
B для того и глобальный и сам себе хозяин, что он не должен умирать одновременно с создателем А, но только после его смерти. Ибо дети наши, не собственность наша и не следует им умирать вместе с нами аминь
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39735152
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JagareB для того и глобальный и сам себе хозяин, что он не должен умирать одновременно с
создателем А, но только после его смерти.

Сам себе противоречишь. Определись-таки: он "сам себе хозяин" или "не должен умирать
раньше создателя".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование объектной ссылки для отслеживания его уничтожения.
    #39735193
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Использование объектной ссылки для отслеживания его уничтожения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]