2013-03-29 17 views
24

Có giải phóng danh sách chung chung như TList<string>, TList<Double>, TList<Integer> hoặc TList<TMyRecord>, nơi TMyRecord được khai báo như sau:Làm thế nào để giải phóng một TList <T> chung?

type 
    TMyRecord = record 
    MyString: string; 
    MyDouble: Double; 
    MyInteger: Integer; 
    end; 

yêu cầu bất kỳ công việc bổ sung hoặc là MyList.Free đủ?

+14

+1. Câu hỏi rất hay. –

Trả lời

27

Tóm tắt

MyList.Free là đủ.

câu trả lời chi tiết

Các TList<T> chứa generic sở hữu nội dung của nó. Khi bạn giải phóng hộp chứa, nội dung cũng được xử lý.

Bây giờ, nếu T là tham chiếu không được quản lý, hoặc là một con trỏ hoặc một lớp, thì danh sách sẽ sở hữu tham chiếu. Nó không sở hữu mà tham chiếu đề cập đến. Vì vậy, nếu bạn có TList<TObject>, thêm một số đối tượng, và sau đó giải phóng danh sách, các tham chiếu được xử lý, nhưng các đối tượng vẫn còn. Vì vậy, để đối phó với điều này có TObjectList<T>. Thùng chứa đó có thể được cấu hình để sở hữu các đối tượng cũng như các tham chiếu và do đó loại bỏ các đối tượng tại thời điểm thích hợp.

Hiện tại, trong trường hợp của bạn, mỗi danh sách của bạn chứa loại giá trị hoặc loại được quản lý. Danh sách sở hữu các đối tượng đó và xử lý chúng khi nó bị phá hủy. Vì vậy, đối với tất cả các danh sách của bạn, MyList.Free là tất cả những gì cần thiết.

Các vấn đề liên quan