如何在 Delphi (XE4)中通过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;
1条答案
按热度按时间edqdpe6u1#
偏移量是相对于示例指针的。您的代码应该是:
你可能更喜欢使用字段对象的
GetValue
方法来读取字段的值,这样就避免了所有指针运算。你在这里做的是非常有限的。所有的派生类都必须符合这个策略。所有的字段必须是对象并且必须由这个类拥有。你不能有整数字段,布尔字段等等。至少你应该只尝试破坏那些是对象的字段。
我的直觉告诉我,你的企图将被证明是行不通的。