Форум: "Начинающим";
Текущий архив: 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.014 c