2012-10-06 52 views
0

我的自定義控件有父指針,但我不知道如何在析構函數中釋放這些指針。如何釋放這樣的指針?

變量:

{Pointers} 
    Form: TForm; 
    GeneralPointer: Pointer; 
    Frame: ^TImage; 

構造:

constructor TViOS.Create(var ImageOutput: TImage); 
begin 
inherited Create; 

    Form := TForm(GetParentForm(TControl(ImageOutput))); 
    GeneralPointer := Addr(ImageOutput); 
    Frame := GeneralPointer; 
... 
+0

它看起來不像是通過創建任何東西來分配任何RAM - 看起來你只是設置指向已經存在的對象的指針,對吧?你不能在析構函數中將變量設置爲'nil'嗎? –

+0

@詹姆斯L.好吧,我現在得到它=) –

回答

3

既然你不創建任何在構造函數中的對象,你不需要Free他們在析構函數 - 只需將它們設置爲零。

destructor TViOS.Destroy; 
begin 
    Form := nil; 
    GeneralPointer := nil; 
    Frame := nil; 
end; 
+5

爲什麼要麻煩設置指針爲零?我只是刪除整個析構函數。 –

0

除了別人怎麼說,你的代碼可以使用一些清理:

Form: TForm; 
GeneralPointer: Pointer; 
Frame: TImage; 

constructor TViOS.Create(ImageOutput: TImage); 
begin 
    inherited Create; 
    Form := GetParentForm(ImageOutput) as TForm; 
    GeneralPointer := ImageOutput; 
    Frame := ImageOutput; 
    ... 
end;