delphi сравнить объекты узнать другой ли объект занимает туже память

var
  O: TObject;
begin
  O := Edit1;
  Edit1.Free;
  Edit1 := TEdit.Create(self);
  if O = Edit1 then   // true хотя хочу что было false как это сделать

и O это реально ново созданный Edit1


Ответы (1 шт):

Автор решения: Kromster

Давайте разберем по шагам:

  1. Вы запоминаете адрес объекта в O (TObject это по сути указатель)
  2. Вы создаете новый объект и сохраняете его адрес в Edit (какой адрес он получит нам не подконтрольно)
  3. Вы сравниваете 2 адреса (указателя)

Итого, про объекты в вашем сравнении ничего нет. А адреса могут как совпадать, так и нет, достаточно случайным образом.


Как же проверить, что объект по указателю новый?

Только храня где-то информацию об этом. Либо в неком общем диспетчере (записи вида "объект такой-то создан" "объект такой-то уничтожен"). Либо храня в самом объекте какой-то уникальный для него маркер (например автоинкрементный id, или например гуид).

→ Ссылка