delphi сравнить объекты узнать другой ли объект занимает туже память
var
O: TObject;
begin
O := Edit1;
Edit1.Free;
Edit1 := TEdit.Create(self);
if O = Edit1 then // true хотя хочу что было false как это сделать
и O это реально ново созданный Edit1
Ответы (1 шт):
Автор решения: Kromster
→ Ссылка
Давайте разберем по шагам:
- Вы запоминаете адрес объекта в
O(TObject это по сути указатель) - Вы создаете новый объект и сохраняете его адрес в
Edit(какой адрес он получит нам не подконтрольно) - Вы сравниваете 2 адреса (указателя)
Итого, про объекты в вашем сравнении ничего нет. А адреса могут как совпадать, так и нет, достаточно случайным образом.
Как же проверить, что объект по указателю новый?
Только храня где-то информацию об этом. Либо в неком общем диспетчере (записи вида "объект такой-то создан" "объект такой-то уничтожен"). Либо храня в самом объекте какой-то уникальный для него маркер (например автоинкрементный id, или например гуид).