Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамический массив


Иван1 ©   (2007-12-07 12:32:00) 

Надо ли освобождать память занятую динамическим массивом (если он мне больше не нужен)?

var
 a: array of TMyRecord;
begin
 SetLength(a, 1000);
 ...
 SetLength(a, 0); // ???


Ins   (2007-12-07 15:28:00) [1]


> Но я советую, если не читаешь, то делай явно, надежно.

Ну а я, соответственно, почитать и разобраться ;) Если это конечно не противоречит религиозным убеждениям...


Kolan   (2007-12-07 14:55:00) [2]

Хм, дим массив — это тип с управляемым временем жизни, и следовательно делать SetLength(a, 0) ненадо, все сделает Compiler magic.

То есть

> Надо ли освобождать память занятую динамическим массивом

Нет.


Anatoly Podgoretsky   (2007-12-07 14:11:00) [3]

А вот автор не читал.
Но я советую, если не читаешь, то делай явно, надежно.


Ins   (2007-12-07 13:26:00) [4]


> Ты наверно документацию читал?


Не помню, пьяный был... :) Но читать документацию в любом случае полезнее, чем гадать и тем более писать код не задумываясь.


Anatoly Podgoretsky   (2007-12-07 12:52:00) [5]

> Ins  (07.12.2007 12:33:01)  [1]

Ты наверно документацию читал?


Ins   (2007-12-07 12:46:00) [6]


> при выходе идентификатора a за область видимости

Если это единственная ссылка на массив, разумеется. Вообще тут дело в том, что для финализируемых типов, коими являются длинные строки, динамические массивы, интерфейсы и варианты, ведется подсчет ссылок - сколько идентификаторов ссылается на данный объект. Компилятор автоматически вставляет код инициализации и финализации.

var
a: array of TMyRecord;
begin  // Тут вставляется код инициализации
...
end;   // а тут - код финализации


Код финализации сводится к уменьшению числа ссылок, и если оно достигло нуля - освобождения памяти. Тут подробнее:
http://www.rsdn.ru/article/Delphi/dynarrays.xml


Ins   (2007-12-07 12:33:00) [7]

Сама освободится при выходе идентификатора a за область видимости, в том и фишка финализируемых типов.


Anatoly Podgoretsky   (2007-12-07 12:33:00) [8]

А тебе что тяжело написать SetLength(a, 0), считаешь лучше гадать надо или не надо?


Наверх

Титульная страница Поиск, карта сайта Написать письмо