Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
Внизобъекты и память Найти похожие ветки
← →
freeman82 (2004-11-11 12:07) [0]В программе создаются несколько объектов
procedure TForm1.Button1Click(Sender: TObject);
var
obj:TMyObject;
begin
obj:=TMyObject.create;
obj.property1:="";
end;
Если я при закрытии программы напишу
obj.free;
то освободится ли память выделенная под все объекты данного класса?
← →
REA (2004-11-11 12:15) [1]Нет, если присваивать все объекты одной переменной obj.
← →
Семен Сорокин © (2004-11-11 12:19) [2]procedure TForm1.Button1Click(Sender: TObject);
var
obj:TMyObject;
begin
obj:=TMyObject.create;
obj.property1:="";
end;
здесь явная утечка памяти...
каждому вызову Create должен соответствовать вызов Free
← →
Gloomer © (2004-11-11 12:31) [3]а может переменную obj стоит объявить глобально и создавать TMyObject.create только один раз в FormCreate?
И как при закрытии программы у тебя будет присутствовать obj, если она определена локально в ButtonClick?
← →
freeman82 (2004-11-11 12:33) [4]а как решить такую задачу,есть дерево treeview,в каждом узле дерева я хочу хранить указатель на объект,
node.data:=obj;
как при закрытии программы удалить память выделенную под все объекты.
← →
panov © (2004-11-11 12:42) [5]>freeman82 (11.11.04 12:33) [4]
Пройтись в цикле по всему дереву и освободить память, выделенную под объекты.
← →
Digitman © (2004-11-11 12:44) [6]
> freeman82 (11.11.04 12:33) [4]
> как при закрытии программы удалить память выделенную под
> все объекты.
именно при закрытии ты вправе вообще об этом не беспокоиться.
← →
freeman82 (2004-11-11 13:03) [7]>Digitman
т.е. если я делаю так
var
obj:TMyObject;
begin
obj:=TMyObject.create;
obj.property1:="";
TreeView1.Items.AddChildObject(Node,obj.property1,obj);
то при закрытии программы не будет утечки памяти?
← →
Digitman © (2004-11-11 13:11) [8]
> freeman82 (11.11.04 13:03) [7]
в соответствии с документацией Майкрософт - не будет.
← →
freeman82 (2004-11-11 13:19) [9]Спасибо за ответы
← →
begin...end © (2004-11-11 13:21) [10]Digitman © (11.11.04 13:11) [8]
Кстати, а с динамическими массивами - также?
Т.е. они тоже автоматически освободятся при закрытии?
← →
panov © (2004-11-11 13:27) [11]>begin...end © (11.11.04 13:21) [10]
При завершении процесса все ресурсы освобождаются...
← →
Digitman © (2004-11-11 13:40) [12]
> begin...end © (11.11.04 13:21) [10]
> Кстати, а с динамическими массивами - также?
а какая разница - "динамический" массив или какой-то иной ?
с т.з. ресурсов ОС - абсолютно никакой разницы.
← →
begin...end © (2004-11-11 13:44) [13]panov © (11.11.04 13:27) [11]
Digitman © (11.11.04 13:40) [12]
Спасибо.
← →
KSergey © (2004-11-11 15:33) [14]> [8] Digitman © (11.11.04 13:11)
Формально, с учетом наличия слов "при закрытии программы" ответ, конечно, верный, но не боитесь ли, уважаемый, что он будет привратно истолкован? ;) В том числе распространен на случаи с отсутствующими словами "при закрытии программы"?
← →
Digitman © (2004-11-11 15:53) [15]
> KSergey © (11.11.04 15:33) [14]
> не боитесь ли
мне, знаете ли, фиолетово.
ну превратно истолкует человек, ну споткнется, ну набъет лишнюю шишку - это проблемы невнимательного чтения им материала дискуссии.
а если и набил, то и здесь ничего страшного - вовремя и самостоятельно сделанные выводы навсегда осядут в памяти.
← →
icWasya © (2004-11-11 16:05) [16]>freeman82 (11.11.04 12:33) [4]
>как при закрытии программы удалить память выделенную под все объекты.
У TreeView есть событие OnDeletionprocedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
TObject(Node.Data).Free;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c