Перейти к содержанию
Fire Monkey от А до Я

[Статья] Жизненный цикл объектов в Delphi. Часть 1. Windows, OSX. Что же использовать Destroy, Free, FreeAndNil или DisposeOf?


Рекомендуемые сообщения

  • Администраторы

С появлением мобильных платформ в мире Delphi, произошли серьезные изменения в жизненном цикле объектов. Послужившие причиной многих проблем и вопросов, а как правильно кроссплатформенно удалять объекты. В этой статье детально рассматриваем жизненный цикл объектов на разных платформах и даём ответы на важные вопросы, которые могут побеспокоить даже опытных Delphi разработчиков.

Ссылка на комментарий

Спасибо Ярослав за статью. Вы ответили на мой не заданный вопрос: как правильно в кросс-платформенной среде создавать и уничтожать экземпляры объектов, сохраняя единство кода для всех платформ.
У меня предложение - может быть выделить отдельную тему для подобных статей или вопросов назвав ее - правила хорошего кода. Ибо считаю важным для программиста выработку навыка корректного использования тех или иных методов, особенно тем, кто только начинает с пониманием почему нужно так.

 

Ссылка на комментарий
4 минуты назад, mixi сказал:

Спасибо Ярослав за статью. Вы ответили на мой не заданный вопрос: как правильно в кросс-платформенной среде создавать и уничтожать экземпляры объектов, сохраняя единство кода для всех платформ.
У меня предложение - может быть выделить отдельную тему для подобных статей или вопросов назвав ее - правила хорошего кода. Ибо считаю важным для программиста выработку навыка корректного использования тех или иных методов, особенно тем, кто только начинает с пониманием почему нужно так.

 

тут еще не совсем кроссплатформа, а только Вин и МакОС. мобильные платформы в следующей части и там есть нюансы

Ссылка на комментарий

Спасибо , большое за статью 。 Хотелось бы только уточнить,  правильно ли я понимаю, что  для многоплатформенных решении FreeAndNil не совсем правильная практика,  при разрушении объектов в на каких-то платформах  FreeAndNil просто обнуляет ссылки。 И для правильной работы автоматической системы подсчета ссылок  и гарантированного разрушения объекта лучше  использовать  DisposeOf  .Думаю это будет во второй части  но хотелось бы уточнить  чтобы меньше было правок в написанном коде :)

 

Изменено пользователем CodeToad
Ссылка на комментарий
  • Модераторы
2 часа назад, CodeToad сказал:

Спасибо , большое за статью 。 Хотелось бы только уточнить,  правильно ли я понимаю, что  для многоплатформенных решении FreeAndNil не совсем правильная практика,  при разрушении объектов в на каких-то платформах  FreeAndNil просто обнуляет ссылки。 И для правильной работы автоматической системы подсчета ссылок  и гарантированного разрушения объекта лучше  использовать  DisposeOf  .Думаю это будет во второй части  но хотелось бы уточнить  чтобы меньше было правок в написанном коде :)

 

 

Ссылка на комментарий
  • Администраторы
47 минут назад, GASCHE сказал:

Что значит в зависимости от типа c?

Если c - это объект и у него определен дефолтное свойство, то его нельзя передавать, как var параметр. Компилятор не соберет такой код.

Ссылка на комментарий
  • 1 месяц спустя...

Спасибо Ярослав!

Есть еще одна статья от GunSmoker на эту тему. Там есть ряд интересных ньюансов, которые не описаны у Ярослава и о которых многие не знают.

К примеру то, что DisposeOf хотя и вызывает деструктор, но не освобождает память выделенную под объект.. 

 

Изменено пользователем ENRGY
Ссылка на комментарий
  • Модераторы
52 минуты назад, Major сказал:

Спасибо за статью!

А под Android-ом как лучше удалять временно создаваемые фреймы?

Например, вот так:

Создаём фрейм

  FFrmSettings := TfrmSettings.Create(Self);
  FFrmSettings.Parent := Parent;

Уничтожаем фрейм

  if FFrmSettings <> nil then
  begin
    FFrmSettings.Parent := nil;
    FFrmSettings.DisposeOf;
    FFrmSettings := nil;
  end;
Ссылка на комментарий
  • Администраторы
В 06.03.2017 в 00:29, ENRGY сказал:

К примеру то, что DisposeOf хотя и вызывает деструктор, но не освобождает память выделенную под объект.. 

Это часть из ARC. Поэтому в этой статье этот метод не рассматривается.

Ссылка на комментарий
  • 5 недель спустя...

А как быть с С++  - кругом в документации пишеться , что вместо Free необходимо использовать delete, но в андроиде delete не удаляет объект - тоже юзать FreeAndNil? 

Ссылка на комментарий
  • Модераторы
1 час назад, antarey сказал:

А как быть с С++  - кругом в документации пишеться , что вместо Free необходимо использовать delete, но в андроиде delete не удаляет объект - тоже юзать FreeAndNil? 

в билдере есть умный указатель, unique_ptr, который сам чистит объекты которые больше никем не используются

Но это не точно

Ссылка на комментарий
33 минуты назад, Равиль Зарипов (ZuBy) сказал:

в билдере есть умный указатель, unique_ptr, который сам чистит объекты которые больше никем не используются

Но это не точно

Вот как раз об unique_ptr тоже вопрос, как умные указатели ведут себя на мобильных платформах? Для винды написано что объекты уничтожаются когда их никто не использует, или же когда объект выходит за пределы видимости - если я правильно понял - если объект локальный и внутри какого-то обработчика, то объект будет уничтожен по завершению обработчика.
Но как сие на практике и для винды и мобильных платформ - вопрос к Ярославу и Ембарсадеро

Ссылка на комментарий
Цитата

Вот как раз об unique_ptr тоже вопрос, как умные указатели ведут себя на мобильных платформах?

Нормально ведет.
Начиная с 8:17 до 12:00 минуты видео:
*На слайде сказано: используйте unigue_ptr везде где возможно - Use unigue_ptr where possible.
*Не используйте new/delete

https://youtu.be/14w26ACHrII

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...