Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.19;
Скачать: CL | DM;

Вниз

как проверить существует ли объект   Найти похожие ветки 

 
logslava   (2006-11-01 15:06) [0]

Здравствуйте, мастера!
Подскажите пожалста, как проверить в некоей процедуре
MyProc(Obj: TObject...) "живой" ли этот объект?

проверять
if Obj<>nil then...
недостаточно, ведь ссылка не обНИЛяется при вызове деструктора Free
т. е. совсем не обязательно что моя процедура будет вызвана для инициализированного объекта, а не удаленного - а нужно обращаться к полям и методам


 
Джо ©   (2006-11-01 15:14) [1]

Нужно писать программу так, чтобы подобной ситуации не возникала. А законный отлуп по AV будет честным предупреждением о том, что где-то в программе эта схема нарушается и нужно исправлять программу.


 
Desdechado ©   (2006-11-01 15:17) [2]

FreeAndNil при разрушении объекта или просто :=nil после Free


 
Anatoly Podgoretsky ©   (2006-11-01 15:18) [3]

Это не возможно в принципе.
Пиши правильную программу.


 
logslava   (2006-11-01 15:19) [4]

дело в том, что модуль с процедурой будет подключаться к программе не мной писанной и нелишним было бы проверить (написал ли другой программист FreeAndNil или же просто Free - заранее неизвестно)


 
Джо ©   (2006-11-01 15:19) [5]

> [2] Desdechado ©   (01.11.06 15:17)
> FreeAndNil при разрушении объекта или просто :=nil после
> Free

var
O1,
O2: TObject;
...
 O1 := O2;
 FreeAndNil (O1);
 MyProc (O1);


 
Джо ©   (2006-11-01 15:20) [6]

> MyProc (O1);

То есть MyProc(02);


 
Anatoly Podgoretsky ©   (2006-11-01 15:21) [7]

Desdechado ©   (01.11.06 15:17) [2]
Я бы не стал закладываться на nil

.Create
...
:= nil;
...
if Obj<>nil then...


 
logslava   (2006-11-01 15:21) [8]

я-то знаком с этим принципом, но не факт, что другой напишет правильно и вызовет мою процедуру


 
Джо ©   (2006-11-01 15:22) [9]

> [4] logslava   (01.11.06 15:19)
> дело в том, что модуль с процедурой будет подключаться к
> программе не мной писанной и нелишним было бы проверить
> (написал ли другой программист FreeAndNil или же просто
> Free - заранее неизвестно)

Значит, отлуп по AV нужно показывать тому программисту, который писал "ту программу". На предмет тыкнуть носом и сказать — у тебя в программе ошибка :)


 
MetalFan ©   (2006-11-01 15:24) [10]

ну это уже не должно быть твоей головной болью!


 
Desdechado ©   (2006-11-01 15:24) [11]

Джо ©   (01.11.06 15:19) [5]
Ну, извратиться можно и не так еще, вот только зачем?


 
Anatoly Podgoretsky ©   (2006-11-01 15:29) [12]

> Джо  (01.11.2006 15:22:09)  [9]

ПР: Где?

АП: в 17 строке.


 
Джо ©   (2006-11-01 15:34) [13]

> [11] Desdechado ©   (01.11.06 15:24)
> Джо ©   (01.11.06 15:19) [5]
> Ну, извратиться можно и не так еще, вот только зачем?

Ничего нереального не вижу. Разве ссылка на объект не может содержаться более, чем в одной переменной? Всего лишь показываю, что FreeAndNill никак в этом случае не поможет.



Страницы: 1 вся ветка

Текущий архив: 2006.11.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
1-1160570539
AlexeyT
2006-10-11 16:42
2006.11.19
Проблема с WebBrowser.OnFileDownload


4-1149152948
Mr tray
2006-06-01 13:09
2006.11.19
Хук на активизацию окон


15-1162272915
pusrg
2006-10-31 08:35
2006.11.19
Проблема с воспроизведением видеофайла


3-1158320717
Juice
2006-09-15 15:45
2006.11.19
Медленно работает CDS


6-1151571226
wasserman
2006-06-29 12:53
2006.11.19
idTcpClient &amp; HTTP Post