-1

ここで割り当てについて質問があります。知りたいです

  1. Assignオブジェクト全体のコピーを作成するかどうか
  2. FTEA.Objects[0]も解放されているのか知りたいです。

のコピーを作成したいのですが、FTEA.Objects[0]解放するときは、解放ObjCurするつもりはありませんFTEA.Objects[0]- これを行う正しい方法がわからないため、助けが必要です。ありがとう :

function xxxxxxxxxxxxxxxxxxxxxxxx
var 
  curQuo, tempQuo:TXX_TEA;
begin
  curQuo :=TXX_TEA(FTEA.Objects[0]);
  if xxxxxxxxx then
  begin
    tempQuo := TXX_TEA.Create();
    tempQuo.Assign(curQuo);   // Question 1: Assign copy the whole object value or not
    objCur.AddQuo(tempQuo)
  end
  else
    TXX_TEA(objCur.Quos[0]).Assign(curQuo);
  end;

  finally
    objCur.Free; // Question 2: FTEA.Objects[0] is freed or not
  end;
end
4

2 に答える 2

5

いいえ、別のオブジェクトから割り当てられた 1 つのオブジェクトを解放しても、ソース オブジェクトは解放されません。

Assign がどのように機能するかは、完全にクラスに依存します。クラスに互換性がある場合、各クラスは Assigned を実装してから inherited を呼び出し、独自のカスタム プロパティをソースから宛先に割り当てる必要があります。これらのクラスのソースを調べて、Assign を実装しているかどうかを確認することをお勧めします。

于 2011-08-17T15:06:05.927 に答える
3

割り当ては、クラスごとに実装する必要があるルーチンであるため、プログラムされていることを実行します。引数として渡されたオブジェクト全体を可能な限りコピーしようとするはずです。しかし、それができない場合は、おそらく何もコピーすべきではありません。

一部のクラスには、その強制されていない「契約」に準拠せず、必要な部分のみをコピーする実装がある場合があります。つまり、何をコピーするかは完全に実装次第です。

割り当てには特別な意味はなく、通常の関数であり、ある種のコンパイラ マジックではありません。パラメーターとして渡されたオブジェクトには何もしないため、1 つのオブジェクトを解放しても他のオブジェクトには影響しません。オブジェクトは完全に独立しています。

すべてのクラスが Assign を実装しているわけではないことに注意してください。クラスの Assign を呼び出すと思うかもしれませんが、実際には継承された Assign である可能性があります。これは、コピーされる派​​生クラスの新しいメンバーについて何も知りません。Assign の概念は優れていますが、残念ながら、実装されていないか、適切に実装されていないことがよくあります。

于 2011-08-17T19:11:42.143 に答える