2
どのように私のオブジェクトのフィールドを自由にすることができますRtti
デルファイ(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;
私はそれを知っていますが、私はフリーフィールドへのアプローチとしてこれを使用したくありません。それは特定の条件の問題のためだけです。 –
@ Pejman.Nik物事を破壊するためにRTTIに頼るために "一定の条件"が必要な場合がありますか? –
また、 'GetType(Self.ClassInfo).GetFields'もすべての派生フィールドを取得しませんか?派生したデストラクタとベースデストラクタが同じフィールドを解放しようとすると危険です。代わりに 'GetType(TKnBase).GetDeclaredFields'が必要でしょうか? –