Wie kann ich Felder meines Objekts von Rtti
in Delphi (XE4) freigeben?Free Object's Field Von Rtti
Ich brauche alle Felder frei dynamisch
I Felder finden, aber ich weiß jetzt nicht, wie ich sie befreien sollte:
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;
ich versuche, mit diesem aber nicht funktioniert:
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;
danke, ich weiß das, aber ich will dies nicht als Ansatz für freie Felder verwenden. Es ist nur ein Problem mit bestimmten Bedingungen. –
@ Pejman.Nik Welche "bestimmten Bedingungen" könnten erfordern, dass Sie auf RTTI zurückgreifen, um Dinge zu zerstören? –
"GetType (Self.ClassInfo) .GetFields" ruft nicht auch alle abgeleiteten Felder ab? Das wäre gefährlich, wenn abgeleitete Destruktoren und Basisdestruktoren versuchen, die gleichen Felder zu befreien. Vielleicht brauchen Sie stattdessen 'GetType (TKnBase) .GetDeclaredFields'? –