В продолжение темы - http://programmingmindstream.blogspot.ru/2014/04/blog-post_25.html
Как выглядит SetTo?
А очень просто:
P.S. Для тех кто хочет "пообсуждать FreeAndNil" посоветую для начала прочитать вот это - http://18delphi.blogspot.ru/2013/04/iunknown.html
Как выглядит SetTo?
А очень просто:
type TElementFilter = class(Generator) .. class procedure SetTo(var theFilter: Generator); end;//TElementFilter ... class procedure TElementFilter.SetTo(var theFilter: Generator); var l_This : TElementFilter; begin l_This := Self.Create; l_This.Next := theFilter; FreeAndNil(theFilter); theFilter := l_This; end;
P.S. Для тех кто хочет "пообсуждать FreeAndNil" посоветую для начала прочитать вот это - http://18delphi.blogspot.ru/2013/04/iunknown.html
FreeAndNil?
ОтветитьУдалитьЧто не так?
Удалитьну если с арком, то наверное всё так. просто с первого взгляда кажется, что здесь ошибочное освобождение инстанса, на который сохраняется ссялка в next
ОтветитьУдалитьУ Александра своя реализация IUnknown работающая несколько по другому, чем TInterfacedObject. В конструкторе RefCount взводится в 1 (в отличие от). Соответственно Free (которое тоже свое и работает как IUnknown.Release) обязательно. Иначе память потечет.
Удалитьхотя даже с арком достаточно пересвоения значения переменной… зачем в этом коде вызов FreeAndNil?
ОтветитьУдалитьНиколай, по-моему я уже не раз внятно дал понять, что обсуждать такую ерунду как FreeAndNil - у меня нет никакого интереса.
УдалитьАлександр, я не о Free vs FreeAndNil, я именно о том, что дёргается деструктор
ОтветитьУдалитьА то что у вас используются интерфейсы -это по коду не очевидно
Николай, так и я "не о FreeAndNil".
УдалитьПросто удручает тот факт, что люди комментируют "незначительные мелочи", которые "поняли вскользь и навскидку". И НЕ комментируют КОНЦЕПТУАЛЬНЫЕ вещи, которые "требуют вдумчивого погружения".
Вот именно это и "расстраивает".
Дело ведь не во FreeAndNil, а в том (касательно данного поста и сопутствующих), что фильтры "связываются в цепочки" типа:
Reader -> Filter1 -> Filter2 -> Filter3 -> ... -> FilterN - Writer
Если бы была "откомментирована СУТЬ", то "было бы что обсуждать"...
А так - "очередной раз обсуждать подсчёт ссылок" - неинтересно...
Что же до "интерфейсов" и "моего подсчёта ссылок" - я уже ДАВНО писал - http://18delphi.blogspot.ru/2013/04/iunknown.html
НУ меня лично РАССТРАИВАЕТ, когда я "пишу о тестах" или "об особенностях Supports", а комментируют "а у вас тут запятые не так расставлены"....
так а цепочка она как бы и очевидна… чего её комментировать? :с)
ОтветитьУдалитья написал о том, что меня смутило и заставило задуматься не о СУТИ
Николай, одно из ЛУЧШИХ и ВОСТРЕБОВАННЫХ умений программиста это умение "абстрагироваться от мелочей", а мелочи подмечать и "записывать в вопросы".
УдалитьПодсчёт ссылок мы тоже можем обсудить :-)
ну как же мелочь, Александр.
Удалитьсоздать объект, прописать ссылку в Next, подменить var-параметр - это я понимаю. но тут же грохнуть предыдущий объект (а именно так я читаю код) это не мелочь, а особенность, о которой надо либо упомянуть, либо выкинуть эту строку, чтоб не сбивала от СУТИ… ну я так думаю, может я конечно и придираюсь…
Николай, мелочь.. мелочь.. к посту отношения НЕ ИМЕЕТ... пост О ДРУГОМ... понимаете, если мы будем обсуждать "скажем UML" и скатывать "в мелочи" - мы далеко не уйдём...
Удалитьну, возможно я просто нашёл повод увести разговор в сторону? (или этот повод случайно дали Вы сами?)
Удалитькомментариями с 27го числа я хочу натолкнуть Вас на мысль, что Ваш код могут читать неподготовленные люди, и если упрощать - то это нужно на уровне примеров (т.е. кода). мне так кажется.
постараюсь впредь не раздувать
"неподготовленные люди" - покажусь грубым, но "неподготовленным людям" - надо читать иное.. :-)
Удалитьчто касается Next...
Вы не задумывались, что под Next лежит pm_SetNext?
В котором написано - aValue.SetRefTo(f_Next).
Ссылки на исходники кстати дадены... :-)
Вот например - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Blogger/RealWork/K2/k2TagGen.pas
Понимаете.. Если всё время ориентироваться на "неподготовленных людей" - сложно далеко уйти...
Это как если рассуждать о квантовой теории с людьми, которые не знаю про три закона Ньютона..
Мысль понятна? :-)
Не хочу обидеть...
Но я не раз уже писал.. "Мои посты не для всех"...
Если "пытаться писать для всех", то "можно остаться на месте"...
Ещё раз.. Можно писать про UML или DUnit, но при этом приходится предполагать, что "неподготовленные люди" читали остальное...
Ну СЛОЖНО "в одном посте" включить и три закона Ньютона и квантовую теорию... Надо чтобы читающие "были на уровне"...
а) задумывался, и от этих мыслей легче не стало, скорее даже наоборот
ОтветитьУдалитьб) исходники я время от времени посматриваю, но мне пока в них тяжело ориентироваться
в) понятна)
г) меня тяжело обидеть, но я сам боюсь задеть за живое
д) ну вот и поболтали, спокойной ночи)
ну каждый волен обижаться...
ОтветитьУдалить