Главная страница
    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.46 MB
Время: 0.014 c
10-1109069193
Tarik
2005-02-22 13:46
2005.12.25
Ole


1-1133417197
RoboCop
2005-12-01 09:06
2005.12.25
Удалить границу у TComboBox


2-1133794805
Маня
2005-12-05 18:00
2005.12.25
нужна помощь


14-1133791505
Санёк
2005-12-05 17:05
2005.12.25
Олимпиады по информатике.


1-1133431959
Andron.Ru
2005-12-01 13:12
2005.12.25
Как выдернуть текст из адресной строки Explorera





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский