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'来代替? –