Глубокое клонирование в пользовательском классе 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;

И, кажется, работает на источник, но не пункт назначения. Как мне этого добиться?

0 ответов

Другие вопросы по тегам