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

Вниз

что делать с дин. массивом про закрытии приложения   Найти похожие ветки 

 
anbezr   (2003-04-08 10:26) [0]

Привет!
Должен ли я очищать(SetLength(MyArr, 0)) дин. массив при закрытии приложении или уничтожении объекта?
Спасибо!


 
klovetski   (2003-04-08 10:32) [1]

Должен.
Finalize(MyArr);
или, что то же самое
MyArr := nil;

procedure Finalize( var V [; Count: Integer] );

Description

Finalize should be used only in Delphi code where a dynamically allocated variable is deallocated by other means than the Dispose procedure. Dynamic arrays can never be deallocated using the Dispose procedure, but can be freed by passing them to Finalize.


 
NAlexey ©   (2003-04-08 10:32) [2]

Не должен, динамические массивы должны автоматически разрушаться при выходе из области видимости.
Хотя по этому поводу уже бывали здесь споры, так что на твой выбор.


 
anbezr   (2003-04-08 10:39) [3]

Спасибо!
буду делать := nil;


 
ghg ©   (2003-04-08 12:25) [4]

господа
MyArr := nil; это не освобождение массива, это присвоение указателю значения nil
может таки лучше его освободить (setlength), а потом уже присваивать nil?

если я не прав объясните в чем.


 
Skier ©   (2003-04-08 12:28) [5]

>ghg
Не прав !

Вот выдержка из Help-а :
To deallocate a dynamic array, assign nil to a variable that references the array or pass the variable to Finalize;


 
ghg ©   (2003-04-08 12:40) [6]

а если это вложенные друг в друга динмассивы?
я пробовал по простому поступать с ними вылетал AccessViolation
хотя модет и не из-за этого

по крайней мере я всегда сначала освобождаю а потом nil.
чтоб не думать.


 
Johnmen ©   (2003-04-08 12:45) [7]

>ghg © (08.04.03 12:25)

SetLength(MyArr,0) эквивалентно MyArr:=nil,
компилятор умный, он понимает :)))

А вобщем, лучше придерживаться золотого правила "Сам нагадил - сам убирай", не надеясь на специфику и особенности...:)))


 
Skier ©   (2003-04-08 12:45) [8]

>ghg
Ну если не думать, то ещё и не то можно...:)


 
Андрей Сенченко ©   (2003-04-08 12:48) [9]

IMHO глупый спор - разве сама по себе процедура освобождения массива займет так много времени ?


 
evvcom ©   (2003-04-09 10:36) [10]

Правило "Сам нагадил - сам убирай" относится к правилам "хорошего тона" (или "стиля программирования"). Это желательно делать.
Хотя, когда я анализировал, что же делает код, сгенеренный самим Дельфи, то там довольно умно все это сделано, и Delphi прекрасно по-моему справляется с обязанностями мусорщика. Все выделения памяти он завязывает в цепочку с указанием типов переменных, под которые эта память была выделена, и перед закрытием приложения сам вызывает Finalize для всех неосвобожденных переменных.



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
4-67636
freeek10
2003-02-24 13:38
2003.04.21
Как лучше это сделать?


3-67135
Vovik
2003-04-02 15:24
2003.04.21
DXdbgrid


3-67165
Наташа
2003-04-03 14:41
2003.04.21
FreeReport


9-67079
Denton
2002-11-02 20:11
2003.04.21
DirectDraw and OpenGL


4-67625
GRS
2003-02-21 22:44
2003.04.21
Как поменять всплывающую подсказку у кнопки ПУСК?