через FreeAndNil, то
>ОБЯЗАТЕЛЬНО должна быть парная
>проверка if Assigned() иначе надо
>использовать обычный вызов Free.
это с чего это? @rouse_79
Типа надо писать вот так:
if Assigned(my) then FreeAndNil(my) ?
Какой в этом смысл? Если он не Assigned, то значит он уже nil.
Точно также после FreeAndNil он останется nil, в чем смысл?
Как это ты умудрился ваще все с ног на голову перевернуть? В тексе четко указано если А тогда Б если используем FreeAndNil то перед использованием обьекта проверка, т.е. FreeAndNil(my); ... if Assigned(my) then но никак не наоборот :))))
а надо мной смеялись, когда я приводил такой вариант :) Как я уже ранее упоминал, Лазарь в каких-то случаях просто не дает писать FreeAndNil без такой проверки. Попадется такой кейз, обязательно воспроизведу его
В качестве параметра FreeAndNil недопустимы константы и свойства классов, потому что параметр var. Вряд ли компилятор умеет отслеживать более сложные случаи. Разве что внутри одной процедуры заметит, что переменная не была инициализирована.
Это где такое?
10.4 и выше
про константы я в курсе :) Когда я основательно грыз TThread, то в процессе экспериментов иногда получал какую-то (убей, не вспомню, о чем) ошибку (даже не ворнинг), которая пропадала, если выставить условие if Assigned (...). Было это где-то на версии Лазаря 1.7. Сейчас некогда ее воспроизводить, возможно в ЛЦЛ что-то фиксили 🤷🏻♂️
Обсуждают сегодня