2
我如何可以通過在delphi(XE4)Rtti
自由字段的我的對象?自由對象的字段通過Rtti
我需要釋放所有領域的動態
我能找到的領域,但現在我不,我應該如何釋放他們:
destructor TKnBase.Destroy;
var
AContext: TRttiContext;
AField: TRttiField;
begin
for AField in AContext.GetType(Self.ClassInfo).GetFields do
begin
-->free filed (AField)
end;
inherited;
end;
我試着用這個,但不起作用:
destructor TKnBase.Destroy;
type
dp = ^TObject;
var
AContext: TRttiContext;
AField: TRttiField;
p: dp;
begin
for AField in AContext.GetType(Self.ClassInfo).GetFields do
begin
p := dp(NativeInt(AField) + AField.Offset);
TObject(p^).Free;
end;
inherited;
end;
謝謝,我知道,但我不想用這種方法來釋放字段。這僅僅是爲了某些條件的問題。 –
@ Pejman.Nik「某些條件」可能會要求你使用RTTI來摧毀東西? –
另外,GetType(Self.ClassInfo).GetFields'是否也檢索所有派生字段?如果派生析構函數和基析構函數試圖釋放相同的字段,那將是危險的。也許你需要'GetType(TKnBase).GetDeclaredFields'來代替? –