Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

CustomData   Найти похожие ветки 

 
Trible   (2006-12-14 22:16) [0]

Здравствуйте.
Вопрос к в первую очередь к Владимиру.
Написанный компонент содержит дополнительный record (указатель в CustomData).
в книге написано что CustomData освобождается, при уничтожении компонента.
А если там PStrlist, он автоматом освободиться или его отдельно
нужно освобождать?


 
mdw ©   (2006-12-15 13:21) [1]

Нет, ничего не освободит.
Лучше использовать CustomObj, дам деструктор есть.


 
Trible   (2006-12-15 13:48) [2]

Так и думал. Спасибо. Да мне уже неохота переписывать..
Освобожу в Destroy самого компонента.


 
thaddy   (2006-12-16 11:36) [3]

To add a bit of explanation:

CustomData and CustomObj are both useful for extending KOL controls.
CustomData is for Data, like arrays, records, etc. and the data is indeed freed.
CustomData points to a block of actual contiguous memory.

CustomObj is intended for objects and this object is indeed free"d.
CustomObj datasize is a pointer to an object.
Now a pointer to object has a size of 4 bytes, so when you attach this to CustomData, only this pointer - 4 bytes- is free"d and the object itself causes a memory leak.....

If you need to use both CustomData and CustomObj, make shure you call "AddToAutoFree" for the object that is attached to CustomData.
In that case everything works fine.

IMO the best place to do that is to override "init" and create the object for Customdata there and call AddToAutoFree.

Ofcourse this is also a good place to Create the object attached to CustomObj, but the call to AutoFree is not necessary in that case, because it is already done for you.


 
Trible   (2006-12-16 14:20) [4]


> only this pointer - 4 bytes- is free"d and the object itself
> causes a memory leak


hem, didn"t know about that. Are you really sure?
Because I specially downloaded some of the componets wrote by Kladov.
exactly - KOLSoundCtl. And here Kladov use Customdata (TSoundCtlData) but
didn"t free it!

And the second. Can I free Pstrlist (which is in customdata) in destructor of the component?


 
Trible   (2006-12-16 14:21) [5]

http://www.kolnmck.ru/files/components/media/kolsoundctl.7z


 
thaddy   (2006-12-16 18:43) [6]

But it is exactly as I explained:
[CODE]
// in constructing function
 GetMem( D, Sizeof( TSoundCtlData ) ); // allocates memory, not instantates object
 FillChar( D^, Sizeof( D^ ), 0 );
 Result.CustomData := D;
[/CODE]
This is free"d automatically by a call to freemem.

In case of an object it may need finalization, which never happens.

Question two: yes, you can override destroy, because it is virtual.
AddToAutoFree is more convienent, I think.
As is putting most of the constructing code (in this case) in the init procedure. (cleaner, I am shure VK agree"s)



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

Текущий архив: 2007.07.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
2-1183450957
ChaoX
2007-07-03 12:22
2007.07.29
Как напечатать из Paintbox?


2-1183355919
Alex8
2007-07-02 09:58
2007.07.29
Изменение редактора полей в RunTime


15-1183046026
oldman
2007-06-28 19:53
2007.07.29
Кто-то спрашивал про Delphi на Wap...


15-1183462782
avsam
2007-07-03 15:39
2007.07.29
Плагин для Delphi 6 линии begin end


2-1183357909
OH
2007-07-02 10:31
2007.07.29
Прозрачность формы