Вверх ↑
Разработчик
Ответов: 26071
Рейтинг: 2122
#1: 2007-08-20 19:42:55 ЛС | профиль | цитата
Dilma писал(а):
ты так и не понял для чего и зачем нужен метод free_and_nil несмотря на все старания Galkovа

А г-н Galkov мне ничего, собственно, и не объяснял -- одни только "а зачем?", "а почему?". Насчет
Dilma писал(а):
FTimer.Enabled := false
я уже разобрался, посмотрев KOL, там он уже есть, также как и FTimer.Periodic := true. Насчет Free_and_nil вот что пишет Кладов
Кладов писал(а):
Иногда возникает необходимость "одновременно" разрушить объект и обнулить (присвоить
nil) указателю на этот объект. В VCL для этого существует функция FreeAndNil, в KOL для
этой же цели функция называется Free_And_Nil. Причем, в этой функции сначала
обнуляется переменная-указатель объекта, а уже затем объект разрушается (вызовом
метода Free). Конечно, это почти эквивалентно тому, чтобы объект был сначала разрушен,
а затем присвоен nil переменной-указателю. Но в многопоточном приложении разница
может быть ощутима. Достаточно представить себе ситуацию, в которой объект был
разрушен (или начал разрушаться, но операция еще не завершена), а указатель все еще
не равен nil, и в этот момент потоки переключились, и в другом потоке так же начинают
выполняться какие-то операции с этим же объектом через тот же самый указатель. Даже в
случае однопоточного приложения тот факт, что некоторый глобальный указатель
продолжает показывать на уже несуществующий объект, или на объект, для которого уже
начала выполняться операция разрушения, представляет определенную опасность. Так
что потребность в функции Free_And_Nil очевидна.
Вы можете вразумительно ответить, почему его нельзя использовать, особенно там где применяется поток?

карма: 22

0