Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПочему FreeAndNil такой, какой он есть? Найти похожие ветки
← →
Sha © (2012-06-19 17:39) [40]> а если код сложный?
> + копи паст?
ошибки надо исправлять, а не прятать
← →
brother © (2012-06-19 18:56) [41]> ошибки надо исправлять
вот FreeAndNil и поможет...
← →
Sha © (2012-06-19 19:07) [42]> вот FreeAndNil и поможет...
[37]
← →
Владислав © (2012-06-19 23:21) [43]Почему, если выстрелить себе в ногу, будет больно?..
> Наступил на грабли..
Вот чтобы было больно сразу после выстрела, а не через какое-то время, после прилетания черенка по голове.
Я к чему, помогло таки?
← →
Омлет © (2012-06-19 23:55) [44]> помогло таки?
Помогло.
← →
Sha © (2012-06-20 00:31) [45]попытки "обнулить переменную совсем" также "помогают" потерять контроль над программой
← →
oxffff © (2012-06-20 00:34) [46]
> Sha © (20.06.12 00:31) [45]
> попытки "обнулить переменную совсем" также "помогают" потерять
> контроль над программой
Это как?
← →
Sha © (2012-06-20 00:35) [47]что как?
← →
oxffff © (2012-06-20 00:38) [48]Пример нужно.
← →
Sha © (2012-06-20 00:45) [49]Примера, как "обнулить переменную совсем", у меня нет. Была тут давно-давно веселая ветка, в которой ТС настойчиво хотел это сделать так, чтобы переменной не осталось вовсе, наверно. Думаю, многим она запомнилась.
Меня FreeAndNil настораживает не меньше, чем Application.ProcessMessages. Очень похоже, что у программиста была проблема, для решения которой использовались труднопонимаемые костыли. Скорее всего, все варианты передачи управления он не предусмотрел. Как-то так.
← →
Petr V. Abramov © (2012-06-20 00:45) [50]
> oxffff © (20.06.12 00:38) [48]
>
> Пример нужно.
>
совсем :)
← →
oxffff © (2012-06-20 00:50) [51]
> Sha © (20.06.12 00:45) [49]
Моя вина, я видимо что то пропустил. :)
P.S. Насколько помню, не использовал freeandnil
(2 раза не считается из 100500). Считаю тем не менее, что ее логика возможно кому то пригодится, и не отрицаю freeandnil. Но тем не менее, понимаю, что в сложных циклическим связках, гораздо лучше GC.
← →
Anatoly Podgoretsky © (2012-06-20 07:38) [52]> Sha (20.06.2012 00:45:49) [49]
Это у Борланда была проблема – чтобы еще для ламеров сделать, а то они
неумехи не могут переменную обнулить и вместо нормально решения в стиле ООП
они сделали нетипизированый костыль.
← →
oxffff © (2012-06-20 09:12) [53]
> они сделали нетипизированый костыль.
Нетипизированный он и должен быть - это правильно с точки зрения теории типов.
← →
KSergey © (2012-06-20 14:09) [54]> oxffff © (20.06.12 09:12) [53]
Может таки TObject должен быть тип аргумента?
Иначе фигня получается.
Правда как это относится к теме данного топика - я чета не понимаю.
← →
oxffff © (2012-06-20 15:11) [55]
> KSergey © (20.06.12 14:09) [54]
> > oxffff © (20.06.12 09:12) [53]
>
> Может таки TObject должен быть тип аргумента?
> Иначе фигня получается.
Фигня получается, если параметр будет TObject.
http://pages.cs.wisc.edu/~rkennedy/var-identical
← →
KSergey © (2012-06-20 15:26) [56]> oxffff © (20.06.12 15:11) [55]
> Фигня получается, если параметр будет TObject.
Можно поконкретнее, где там про фигню, относящуюся к FreeAndNil?
Впрочем, как и про любую другую.
← →
oxffff © (2012-06-20 15:43) [57]
> KSergey © (20.06.12 15:26) [56]
Я не Rouse, на дискуссию у меня нет времени.
← →
Kerk © (2012-06-20 15:46) [58]
> KSergey © (20.06.12 15:26) [56]
Попробуй сделать аналог FreeAndNil, принимающий TObject. Сам все поймешь.
← →
oxffff © (2012-06-20 15:48) [59]
> Я не Rouse, на дискуссию у меня нет времени.
Впрочем думаю, что и у Александра его тоже нет.
← →
jack128_ (2012-06-21 00:31) [60]
> Нетипизированный он и должен быть - это правильно с точки
> зрения теории типов.
Это правельно с точки зрения примитивной объект паскалевской системы типов. С дженериками эта процедура должна иметь такую сигнатуру:
procedure FreeAndNil<T:TObject>(var Obj: T);
← →
icWasya © (2012-06-21 09:38) [61]>Sha © (20.06.12 00:45) [49]
>была проблема, для решения которой использовались труднопонимаемые костыли.
Костыль применён, но им не воспользовалисьprocedure TForm1.ChangeConnectionEvent(Sender: TObject);
var fDBConnector:TDBConnector absolute Sender;
begin
if Assigned(fDBConnector) then //<<==--
AddToLog("Nul.") else //<<==--
if fDBConnector.ConnectionState = csDisconnected then
AddToLog("Disconnected.");
end;
← →
KSergey © (2012-06-21 10:46) [62]> Kerk © (20.06.12 15:46) [58]
Короче наследника не дает запихать в var
Так бы и сказали. При чем тут дискуссия??
← →
oxffff © (2012-06-21 12:56) [63]
> Это правельно с точки зрения примитивной объект паскалевской
> системы типов.
Я о том, что у типизированного указателя подтипом является только он сам.
← →
wl © (2012-06-21 13:53) [64]мне кажется это какие-то многопоточные заморочки. чтобы во время работы деструктора другой поток не вздумал пользоваться полуразрушенными данными объекта
← →
KSergey © (2012-06-21 14:14) [65]> wl © (21.06.12 13:53) [64]
Это никак не защищает, сели ссылки - две.
Да второй поток может запросто вызвать какой-то метод объекта, этот метод на середине прервется - и тут поедет выполняться Free
Этому ничего не мешает вообще, это все на совести программиста такие фокусы.
← →
Kerk © (2012-06-21 15:17) [66]В мелкософт есть один чувак (Реймонд Чен?), объясняющий в блоге истоки некоторых исторически сложившихся решений в Windows и в WinAPI вчастности. Интересно было бы подобное из недр Embarcadero почитать. Кто вообще придумал FreeAndNil и почему реализовал именно так :)
← →
Anatoly Podgoretsky © (2012-06-21 15:31) [67]> Kerk (21.06.2012 15:17:06) [66]
Раньше блоги назывались дискуссионные группы новостей, Было Borland News
Groups, там TEAMB обсуждали эту тему, в общем выходило что в основном для
ламеров, пошли на поводу, особенно сильно это было в Д6/7 они столько
функций наплодили, вместо развития языка
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.08 c