Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Вниз

Опять вопрос про классы   Найти похожие ветки 

 
Piero ©   (2005-12-07 13:23) [0]

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

Txy = record
         x,y : integer;
        end;

TElem = class
 protected
  L         : byte;
  direction : smallint;
  sum       : word;
  path      : TarrayXY;
  level     : integer;
  Num       : integer;
....

constructor TElem.Create;
begin
inherited Create;
L     :=30;
sum   :=0;
Level :=0;
Number:=0;
end;

destructor TBranch.Destroy;
begin
inherited Destroy;
path:=nil;
end;

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


 
Sapersky   (2005-12-07 14:12) [1]

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

В смысле, рассчитываешь, что они сами по себе уничтожатся (как длинные строки и дин. массивы)?
Нет, не уничтожатся. Нужно вручную (Free).


 
Piero ©   (2005-12-07 14:18) [2]

А ну да, без free, деструктор не срабатывает.


 
Piero ©   (2005-12-07 14:26) [3]

С free, тоже память не освобождается, может я неправильно деструктор описал?


 
umbra ©   (2005-12-07 14:34) [4]

В деструкторе inherited лучше вызывать после того, как Вы уничтожаете свои данные.


destructor TBranch.Destroy;
begin
 path := nil;
 inherited;
end;


 
Alexander Panov ©   (2005-12-07 14:56) [5]

Piero ©   (07.12.05 13:23)
что я должен сделать в деструкторе, чтобы память освобождалась


Ничего.
Главное, чтобы объекты типа TElem уничтожались.
Память, выделенная под динамический массив path будет освобождена автоматически после уничтожения объекта.


 
Piero ©   (2005-12-07 15:00) [6]

umbra ©, понял, но разницы по памяти - никакой

Alexander Panov ©, ясно


 
Piero ©   (2005-12-07 15:35) [7]

Делаю так:

for i:=1 to 2000000 do
  begin
   br:= TElem.create;
  end;

или так

for i:=1 to 2000000 do
  begin
   br:= TElem.create;
   br:=nil;
   br.Free;
  end;

разницы никакой, памяти жрет столько же (очень много), как же высвободить её от этих объектов


 
Игорь Шевченко ©   (2005-12-07 15:39) [8]

Piero ©   (07.12.05 15:35) [7]


> for i:=1 to 2000000 do
>   begin
>    br:= TElem.create;
>    br:=nil;
>    br.Free;
>   end;


for i:=1 to 2000000 do begin
 br := TElem.Create;
 br.Free;
end;


 
Piero ©   (2005-12-07 15:40) [9]

Делаю так:

for i:=1 to 2000000 do
  begin
   br:= TElem.create;
  end;

или так

for i:=1 to 2000000 do
  begin
   br:= TElem.create;
   br:=nil;
   br.Free;
  end;

разницы никакой, памяти жрет столько же (очень много), как же высвободить её от этих объектов


 
Piero ©   (2005-12-07 15:42) [10]

Понял, спасибо, значит я как раз освобождал память по указателю nil, а надо было по реальному



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

Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
14-1133363929
oldman
2005-11-30 18:18
2005.12.25
Вот такой интересный вопрос правайдерам...


2-1133965768
Daria
2005-12-07 17:29
2005.12.25
как в программе автоматом открывать файлы для работы с ними


2-1133954653
Id
2005-12-07 14:24
2005.12.25
IBDataSet.


14-1133785308
LordOfRock
2005-12-05 15:21
2005.12.25
Delphi 6 виснет....


6-1127139449
Hamsterman
2005-09-19 18:17
2005.12.25
Возможно ли в Delphi программным путём посылать HTML forms?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский