gpt4 book ai didi

delphi - Rtti 的自由对象字段

转载 作者:行者123 更新时间:2023-12-02 15:15:46 27 4
gpt4 key购买 nike

如何在 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;

最佳答案

偏移量是相对于实例指针的。您的代码应该是:

 p := dp(NativeInt(Self) + AField.Offset);

您可能更喜欢使用字段对象的 GetValue 方法来读取字段的值。因此要避免所有的指针算术。

您在这里所做的事情非常有限。所有派生类都必须遵守此策略。所有字段都必须是对象并且必须归此类所有。不能有整数字段、 bool 字段等。至少你应该只尝试破坏作为对象的场。

我的直觉告诉我,你的尝试将被证明是行不通的。

关于delphi - Rtti 的自由对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38555762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com