Pero, por ejemplo, si haces:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
c1,c2: TMiClase;
begin
c1 := TMiClase.Create;
c1.Cadena:= 'XXXX';
c2 := c1.Clone;
c2.Cadena := 'YYYY';
ShowMessage(c1.Cadena); end;
Es decir, c2.Cadena y c1.Cadena hacen referencia a la misma cadena. En un clonación, el objeto clonado debería ser inicialmente igual al original en todo aspecto pero cambios posteriores no deberían afectar al otro.
Lo mismo sucedería si tu objeto tuviera otros objetos como propiedades.
Por otra parte, un
string lleva un conteo de referencia que, me parece, se alteraría con una asignación usando Move. Es decir, habría dos variables apuntando a la misma cadea pero con un conteo de referencia igual a 1.
Haz la prueba:
Código Delphi
[-]
var
c1,c2: TMiClase;
begin
c1 := TMiClase.Create;
c1.Cadena:= 'XX';
c2 := c1.Clone;
c1.Free;
c2.Cadena := 'Hola'; c2.Free;
end;
Y ni qué decir de interfaces, que también llevan un conteo de referencias.
// Saludos