Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Destroy


Страницы:   1 2

Faiwer ©   (2010-11-09 16:06:00) 

Доброго времени суток. Меня очередной раз интересует вопрос освобождения памяти, какая то слишком запутанная тема :) Есть класс:

 TPhoto = class
   fname: string; // имя файла
   id: integer; // id_photo в photo
   item: cardinal; // пункт в photolist
   data, mini: TMemoryStream; // фото и миниатюра
   procedure register_item;
 end;


Должен ли я писать:

destructor TPhoto.destroy;
begin
 data.Free;
 mini.Free;
end;


Или класс сам удалит их? А если вместо класса я буду использовать record?

Ещё вопрос из той же оперы:

var
 pd: TList<TPhoto>; // photo data


TPhoto - класс. Если я сделаю pd.clear или pd.free, список сам освободит все pd[i].free?

P.S. D2010, W7


Плохиш   (2010-11-11 12:00:00) [1]


> faiwer ©   (10.11.10 23:31) [25]


> faiwer ©   (10.11.10 23:32) [26]

Книжку бы почитал какую, там всё описано. Хотя религиозным любителям сказок читать вредно, пусть верят в чудеса...


Anatoly Podgoretsky   (2010-11-11 09:17:00) [2]

> Германн  (11.11.2010 02:53:29)  [29]

У компонента может не быть владельца, а Controls это все видимые компоненты.


Leonid Troyanovsky   (2010-11-11 07:25:00) [3]


> Германн ©   (11.11.10 02:53) [29]

> > Правильно использовать Controls

> Для чего правильно?

Для контрола.

--
Regards, LVT.


Германн   (2010-11-11 02:53:00) [4]


> Anatoly Podgoretsky ©   (10.11.10 23:55) [28]
>
> > clickmaker  (10.11.2010 23:39:27)  [27]
>
> Правильно использовать Controls
>

Для чего правильно?
Для "произвольного доступа" лучше использовать Components. Оно шире чем Controls.


Anatoly Podgoretsky   (2010-11-10 23:55:00) [5]

> clickmaker  (10.11.2010 23:39:27)  [27]

Правильно использовать Controls


clickmaker   (2010-11-10 23:39:00) [6]

parent - то, на чем лежит. Обычно Form или другой контейнер типа Panel
owner - владелец, ответственный за жизнь и сериализацию свойств компонента, может не быть парентом, н-р Application

в первом контексте для произвольного доступа обычно юзают массив Controls, во втором - Components


faiwer   (2010-11-10 23:32:00) [7]

либо так:

lab:=TLabel.Create(self); => Components[0] == lab

Не проверял, что конкретно :)


faiwer   (2010-11-10 23:31:00) [8]


> Ещё раз спрашиваю, и где здесь автоматом что-то появляется?


lab.parent:=self; => Components[0] == lab


Плохиш   (2010-11-10 23:02:00) [9]


> faiwer ©   (10.11.10 08:37) [22]

Ещё раз спрашиваю, и где здесь автоматом что-то появляется?


faiwer   (2010-11-10 08:38:00) [10]

Palladin, thx, теперь понял о чём вы :)


faiwer   (2010-11-10 08:37:00) [11]


> И где здесь автоматом что-то появляется?


procedure TMainForm.FormCreate(Sender: TObject);
var
 lab: TLabel;
begin
 lab:=TLabel.Create(self);
 lab.parent:=self;
 lab.Caption:='test';
 ShowMessage(TLabel(Components[0]).Caption);
end;


Palladin   (2010-11-10 07:31:00) [12]


> > При выходе за пределы области видимости во время исполения
> > они будут освобождены без твоего участия.Ничего не понял
> :) В каком случае они будут освобождены?


procedure proc1;
var
 R: Array of Integer;
begin
 SetLength(a, 10); // выделили память для 10 integer
end; // конец области видимости для переменной R, память R будет освобождена без твоего участия


Palladin   (2010-11-10 07:28:00) [13]

И вообще. Слова "владелец", "родитель" могут запутать. На самом деле эти понятия частью языка Delphi не являются, они являются понятиями класса TComponent. Этот класс написан простыми программистами.


Palladin   (2010-11-10 07:26:00) [14]


> faiwer ©   (09.11.10 18:25) [10]
> > У них автоматом появляется владелец, который заботится
> об > их уничтожении.Угу. Как раз это я и имел ввиду :)

Система компонентов это простая как три рубля система контейнеров, которые заботятся о уничтожении своего содержимого. Все. К низкому уровню работы, коий ты продемострировал в вопросе, контейнеры не относятся.


Плохиш   (2010-11-09 23:57:00) [15]


> lab:=TLabel.Create(Panel);
> lab.parent:=Panel;
>

И где здесь автоматом что-то появляется?


Плохиш   (2010-11-09 23:53:00) [16]


> DVM ©   (09.11.10 18:13) [9]

> > А если я создаю компоненты, я разве должен их удалять?
>  Они
> > же прописываются в .components[] или .controls[]
>
> У них автоматом появляется владелец, который заботится об
> их уничтожении.

Чё, здесь Калашников со своим автоматом тоже отметился? С какой это стати у них автоматом что-то появляется?


DiamondShark   (2010-11-09 21:03:00) [17]


> Andy BitOff ©   (09.11.10 20:26) [14]
> Давайте еще и здесь похоливарим =)))

А мне показалось, что это раздел "Прочее" %(
Всё, переработал. Пора домой.

И да, мы не холиварим, мы концептуалим.


DiamondShark   (2010-11-09 20:58:00) [18]


> И. Павел ©   (09.11.10 20:22) [13]
> Даже assembler?

Вопрос не имеет смысла: в языке ассемблера отсутствуют сущности, над которыми определены операции создания/уничтожения.


> Или все же только на очень высоком уровне

Человек всегда мыслит только на высоком уровне.

Низкоуровневые языки не для крутости, а от бедности. Когда в 50-х годах прошлого века машинное время было дороже зарплаты программиста, а 100К слов было объёмом памяти суперкомпьютера -- низкий уровень был оправдан.


и если не требуется быстрых вычислений?

Эффективные алгоритмы человеку легче придумывать на высоком уровне.
А с качественным переводом на машинный язык лучше справляется компьютер. Компилятор с глубокой оптимизацией в общем случае выдаст более быстрый код, чем человек способен вручную написать на ассемблере.


Andy BitOff   (2010-11-09 20:26:00) [19]

Давайте еще и здесь похоливарим =)))


И. Павел   (2010-11-09 20:22:00) [20]


> В третьем тысячелетии не имеют права на существование языки
> без автоматического управления памятью.

Даже assembler?
Или все же только на очень высоком уровне, и если не требуется быстрых вычислений?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо