Глубокое клонирование в пользовательском классе Delphi с помощью ссылок и разыменования указателей
Привет, я хочу глубоко клонировать пользовательский класс, который содержит другие подклассы, которых слишком много, чтобы поддерживать способом assign().
Для упрощения я создаю экземпляр с RTTI и использую процедуру переключения
клонировать OriginalInlineContent: TInlineContent;
NewInstance := TInlineContent.CreateInstance(OriginalInlineContent, ...)//with RTTI and instance is good to go this returns TInlineContent
Теперь я хочу переключить ссылку на OriginalInlineContent и NewInstance.
class procedure TInlineContent.SwitchMemory(Source, Destination:
TInlineContent);
var P, S : ^TInlineContent;
SourceSize, DestinationSize : integer;
begin
Assert(Source <> nil);
Assert(Destination <> nil);
SourceSize := SizeOf(Source);
DestinationSize := SizeOf(Destination);
P := @Source;
S := @Destination;
Destination := @P; **//possibly replace destination with P means @S is scrambled?**
Source := @S;
Assert(SizeOf(Source) = DestinationSize);
Assert(SizeOf(Destination) = SourceSize);
end;
И, кажется, работает на источник, но не пункт назначения. Как мне этого добиться?