Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

Динамический массив   Найти похожие ветки 

 
Иван1   (2007-12-07 12:32) [0]

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

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


 
Ins ©   (2007-12-07 12:33) [1]

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


 
Anatoly Podgoretsky ©   (2007-12-07 12:33) [2]

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


 
Ins ©   (2007-12-07 12:46) [3]


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

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

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


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


 
Anatoly Podgoretsky ©   (2007-12-07 12:52) [4]

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

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


 
Ins ©   (2007-12-07 13:26) [5]


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


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


 
Anatoly Podgoretsky ©   (2007-12-07 14:11) [6]

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


 
Kolan ©   (2007-12-07 14:55) [7]

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

То есть

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

Нет.


 
Ins ©   (2007-12-07 15:28) [8]


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
4-1181545591
AndreyRus
2007-06-11 11:06
2007.12.30
Остановка двигателя HDD


15-1196529516
@!!ex
2007-12-01 20:18
2007.12.30
Как переделать lib в dll?


4-1181506821
leonidus
2007-06-11 00:20
2007.12.30
Получение координат нажатия на TouchPad


9-1163886978
Vga
2006-11-19 00:56
2007.12.30
Паки в играх


15-1196329619
andreoman
2007-11-29 12:46
2007.12.30
хелп на русском языке к компоненту cxGrid из DevExpress