我對TStringList.Assign方法的檔案中的模糊術語感到困擾。在
如果 Source 是 TStringList 型別,則串列被 設定為源 TStringList 物件的串列,如果支持關聯物件,則任何關聯物件也被 復制自 Source。
可以用多種方式來解釋。TStringList物件是復制從源物件到目標物件,保留源物件...還是目標物件被設定為指向源物件而不復制任何東西?后者的含義是,如果我隨后釋放目標物件,源物件也會被釋放。或者?
TStrings.AddObject的檔案中的這句話(字串是如何被添加到目的地的)進一步混淆了我的觀點:
注意:TStrings物件并不擁有你以這種方式添加的物件。添加到TStrings物件的物件仍然存在,即使TStrings實體被銷毀。它們必須被應用程式明確地銷毀。
這是否意味著當我使用完目標TStringList時,除了呼叫.Free來銷毀它之外,我還必須做更多的事情?
uj5u.com熱心網友回復:
TStringList.Assign() 復制來自源TStringList的字串和物件指標。只要知道這是一個淺層拷貝而不是深層拷貝,因為string是一個參考計數的型別。
uj5u.com熱心網友回復:
你可以認為Assign是這樣實作的:
PROCEDURE TStrings。 Assign(Source : TStrings);。
VAR
S : STRING。
BEGIN
清除。
FOR S IN Source DO Add(S)
END。
實際的幕后實作可能有所不同,但從外部看,這就是Assign方法的邏輯操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329629.html
標籤:
