All streams
Search
Write a publication
Pull to refresh
159
0
Александр (Rouse_) Багель @Rouse

Инженер — программист

Send message
Можно и так, но гораздо проще сделать TForEachRef не процедурой, а функцией, и ориентироваться на результат, что собственно и показано в нижних вариантах кода :)
ЗЫ: и кстати, просто как совет — включайте в состав статьи ссылку на исходный код демопримеров. Не удобно все это копировать ручками и перепроверять, гораздо проще работать с уже готовыми исходниками :)
Если потребуется прервать итерации раньше, внутри функции можно возбуждать исключение, а вызов ForEach помещать в блок try.

Это не слишком уж сурово? Выход через исключение — тот еще юмор.
Безусловно соглашусь, тут у меня нет никаких возражений, но опять-же тогда просто используем везде TSharedPtr :)
Ну выстрелить в ногу можно гораздо проще, но для этого программисту и голова нужна :)
С последним вариантом — согласен, но тут можно использовать уже TSharedPtr, например вот так.

procedure TestWriteBySharedPtr2;
var
  MyObjects: array of TSharedPtr<TObject>;
  I: Integer;
begin
  SetLength(MyObjects, 32);
  for I := 0 to Length(MyObjects) - 1 do
    MyObjects[I] := TSharedPtr.Create(TObject.Create);
  for I := 0 to Length(MyObjects) - 1 do
    Writeln(MyObjects[I].Value.ClassName);
end;
Если бы это было так, то разрушение произошло сразу после вызова

TObjectDestroyer.Create(F1);


Ведь ссылок нет, значит можно сразу говорить IntfClear, однако идеологически это не верно, поэтому описанная выше ситуация крайне маловероятна :)
Что-то я не уверен что так заработает, но надо поэксперементировать.
Так не получится, ибо объект, контролируемый TObjectDestroyer нужно передавать наружу, соответственно стек уплывет при завершении работы локальной процедуры, и будет большой такой бадабум.
Ну и по поводу накладных расходов с GetMem, там куча не используется, а работает FastMem от Пьера Ле Риче, достаточно шустрый менеджеер памяти, выделяющий сразу много страниц и по вызову GetMem, просто резервирующий нужный участок на уже выделенной ранее через VitualAlloc памяти.
Если автор не против — немножко поподробней раскройте понятие «флуд-сенсоры», с технической точки зрения.
Хорошая болячка.
Даже на минздрав не сослаться — сам втыкнул :)
Ну тут ты конечно развернулся, узнаю подход к методе :)
Идея здравая, главное чтоб перевод не исказил суть материала :)
Все еще свежы в памяти семинары, где переводчик вещал о «ручке» (handle) которую нужно не забывать закрыть вызовом «Закрыть ручку» :)
Ага, вот если бы нилился — тогда никаких претензий и не было бы, но не нилят :)
Не, тут ошибка, разбираем:
1. T — локальная переменная, значит шанс на то что она будет равна NIL достаточно призрачный.
2. В конструкторе класса происходит исключение (к примеру это TFileStream создающийся по не существующему пути)
3. происходит выход на обработчик исключения, где не созданному и, что более важно, не обниленному объекту, вызывается Free — здравствуй Access Violation :)
Не во всех случаях, но в принципе можно.
Ясно, нет я лучше подожду до живого железа, темболее книжку еще не до конца освоил.
А вот статьи — если чесно, я бы был только благодарен, если бы они еще были такого плана.
Пиши еще — чесно.
Мы всем IT отделом читали и смотрели ролики — действительно, все очень просто получается, если так подавать материал.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity