Как я могу освободить поля моего объекта на Rtti
в 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;
спасибо, я знаю это, но я не хочу использовать это как подход к свободным полям. это просто проблема с определенными условиями. –
@ Pejman.Nik Какие «определенные условия» могут потребовать от вас прибегнуть к RTTI, чтобы уничтожить вещи? –
Кроме того, не 'GetType (Self.ClassInfo) .GetFields' также извлекает все производные поля? Это было бы опасно, если производные деструкторы и базовый деструктор попытаются освободить те же поля. Может быть, вам понадобится «GetType (TKnBase) .GetDeclaredFields' вместо этого? –