суббота, 27 апреля 2013 г.

Ещё правки в VCL (3)


destructor TControl.Destroy;
begin
  Application.ControlDestroyed(Self);
  if (FHostDockSite <> nil) and not (csDestroying in FHostDockSite.ComponentState) then
  begin
    FHostDockSite.Perform(CM_UNDOCKCLIENT, 0, Integer(Self));
    SetParent(nil);
    Dock(NullDockSite, BoundsRect);
    FHostDockSite := nil;
  end else
    SetParent(nil);
  FreeAndNil(FActionLink); {V}
  FreeAndNil(FConstraints); {V}
  FreeAndNil(FFont); {V} // - эти деятели в своем репертуаре
  StrDispose(FText);
  FText := nil; {V}
  inherited Destroy;
end;

20 комментариев:

  1. Здесь не понял суть правки :-( Зачем менять Free на FreeAndNil (для FFont и FConstraints)?

    ОтветитьУдалить
  2. Про это писал gunsmoker. Лучше - я не напишу.

    ОтветитьУдалить
  3. Есть интересная статья (и последующее обсуждение) от не менее уважаемого чем GunSmoker:
    http://blogs.embarcadero.com/abauer/2010/02/16/38916

    ОтветитьУдалить
    Ответы
    1. А можно "по-русски" для тех кто "американского языка" не знает? Не можете "пару строк чиркануть"?

      Удалить
    2. Более "идиотского" "американского языка" я кстати не видел...

      Удалить
    3. http://programmingmindstream.blogspot.ru/2013/12/blog-post_3160.html

      Удалить
    4. lulinalex: http://programmingmindstream.blogspot.ru/2013/12/blog-post_3160.html

      XXX: Забей это у автора не то с генами

      lulinalex: да?! :-) я СЧАСТЛИВ!! :-) СПАСИБО!!!


      XXX: Его в комментах вежливо умыли что лучше огрести ав из за nil чем проезд по памяти из за записи в убитый объект

      lulinalex: :-)

      XXX: Он согласился хотя топик не снес


      lulinalex: о чём gunsmoker и писал...

      Удалить
    5. Borland кстати НИКОГДА "ленивой инициализацией" - не "страдал"... А ЗРЯ...

      Удалить
    6. Как я решаю проблему "ленивой инициализации" у "себя":
      if (g_Application = nil) AND not l3SystemDown then
      begin
      l3System.AddExitProc(FreeApp);
      g_Application := l_AC.Create;
      end;//g_Application = nil
      Result := g_Application;

      Удалить
    7. В общем - АНОНИМНЫЕ ссылки (пусть даже и на Embarcadero) не СОДЕРЖАЩИЕ собственных конмментариев и "оценочных суждений" - БУДУТ УДАЛЯТЬСЯ.

      Удалить
  4. СПАСИБО конечно!
    Но!

    Я УЖЕ ПИСАЛ - "я ДЛЯ СЕБЯ РЕШИЛ - ПИСАТЬ FreeAndNil - ВСЕГДА". Точка.

    ОтветитьУдалить
  5. Кстати человека профессиональней чем Аллен Бауэр ещё поискать надо. Его вклад в создание и развитие делфи трудно переоценить. Ради общего развития почитай его блог, ответы на http://stackoverflow.com. Кстати есть классная библиотечка для параллельных алгоритмов в его блоге. Хотя наверно стоило почитать его первую статью http://blogs.embarcadero.com/abauer/2010/02/05/38910. От себя добавлю, что полностью согласен с ним, к тому же концепция и ARC и сборщика мусора по сути исключают явное управление временем жизни объектов - т.е. читай использованием FreeAndNil для зануления ссылок. А это как ни крути более совершенные модели управлением памяти нежели в десктопном делфи. Сам я подхожу к использованию FreeAndNil с точки зрения достаточности. И если в VCL используется в деструкторах именно Free - то видимо это нормально работает у миллионов разработчиков и лезть туда без особой необходимости не стоит

    ОтветитьУдалить
    Ответы
    1. Мнение человека,который стесняется своего имени и фамилии мне как бэ - неинтересно.

      Удалить
    2. Который ещё и "тыкает" к тому же.

      Удалить
    3. Так по делу нечего сказать? Видимо я ошибся в тебе.
      Константин

      Удалить
    4. Ну что же.. Еще один аноним самовыразился... Надеюсь, что кому-то в этом мире стало легче...

      Удалить
    5. "Видимо я *ошибся в тебе*"

      Константин, душка вы моя...

      Мы с вами может быть:

      1. Пили водку из одного стакана? Вроде нет..
      2. Программили вместе СЛОЖНУЮ систему? Вроде нет..
      3. Вешали верёвки вместе по сложным скалам? И тут вроде нет...
      4. Или делили последний сухарь или последний глоток воды? И тоже - не припомню...

      Так чего вы мне ТЫКАЕТЕ? И чего-то ОЖИДАЕТЕ от меня? Кто вы вообще такой?

      А что касается всяких "Бауэров" да и "Ников Ходжесов" - ПЛЕВАТЬ я хотел с ВЫСОКОЙ КОЛОКОЛЬНИ..

      У меня у самого опыта - "могу поделиться"...

      Нет чтобы что-то "умное" про TDD, UML или MDA написать.. Так нет... "давайте по 135-му разу FreeAndNil обсудим"...

      Плюнуть и растереть...

      Мысль понятна?

      Удалить
    6. "Хочется сказать.. Приходили ко мне тут "мастера из МГТС"... ПЕРВОЕ что они мне сказали - "эй мужик - бери провод отматывай сколько тебе надо"... Так и хочется спросить - "я пил с ними" или может быть "верёвки по скалам вешал"? ПОЧЕМУ они мне "тыкают"? Да ладно это... Я КАЖДЫЙ день езжу на маршрутке.. Если люди "до сорока", то они водителю говорят - "возьмите пожалуйста за проезд"... А молодые студенты кричат - "эй ты... возьми за проезд"... Меня почему-то это расстраивает..."

      Удалить
    7. Хоспадя... вроде умный человек, а тоже несет эту чушь про совместные выпивания. Давно бы пора привыкнуть, что в сети все на "ты". И требование с пеной у рта к себе особого обращения по меньшей мере смешно.

      Удалить
    8. :-) ну не хотите слушать меня - не слушайте.. но и я вряд ли вас буду слушать.. ваш комментарий - не удаляю.. равно как и "все остальные".. так сказать "в назидание потомкам"... УВАЖЕНИЕ и "прислушивание к мнению" - оно ВЗАИМНО... а не "в одни ворота".. если "какой-то Аноним", что-то неуважительно пишет.. то какой вывод? да просто с ним не надо было разговаривать с САМОГО начала.. Надеюсь - мысль понятна..

      Удалить