Показать сообщение отдельно
  #30  
Старый 30.03.2014, 23:21
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Freeman
Хорошо. Я страшную вещь спрошу: чем динамический массив отличается от статического? Возможностью установки размера во время выполнения, не так ли? И размер ведь можно не только увеличивать, но и уменьшать. Тогда получается, что абсолютно штатный вызов абсолютно штатной SetLength приведет к утечке памяти. Это больше на Си похоже, где в каждой строчке подстава может быть, не?
Не может SetLength приводить к утечкам памяти - сколько раз её ни вызывай всё равно вся память занимаемая динамическим массивом после его разрушения будет возвращена в общее пользование. Если речь о том, что при этом не происходит разрушения объектов (в случае массива объектов), то это не из-за того что динамические массивы плохие, а из-за того что объекты не являются авторазрушающимися сущностями из-за отсутствия у них счётчика ссылок или другого подобного механизма. Да и не должны разрушаться объекты при разрушении динамического массива - может эти объекты ещё используется в другом месте. Да и статические массивы в этом плане ни чем не отличаются - если в процедуре будет статический массив объектов, то при выходе из этой процедуры ни какие объекты не будут разрушены, но опять же из-за того, что объекты не являются авторазрушаемыми, а вовсе не из-за того, что статические массивы это плохо.
Цитата:
Сообщение от Freeman
К массивам интерфейсов у меня действительно претензий нет, поскольку они управляемы автоматически и потому ведут себя аналогично простым типам. Из-за встроенного счетчика все ссылки на интерфейс являются владеющими, что и придает им сие "волшебное" свойство.
Но при этом они приобретают "волшебное" свойство давать утечки памяти в случае закольцованных ссылок, т.е. если первый экземпляр интерфейса будет ссылаться на второй, а второй на первый, то они не будут авторазрушены даже если на них не будет больше ни одной "внешней" ссылки.
Ответить с цитированием