不能保證!
以下的簡單測試程序可以證明這點
using?System;using?System.Collections.Generic;
namespace?ConsoleApplication1
{
//?定義壹個類
class?Person
{
public?string?Name;
public?int?Age;
}
class?Program
{
static?void?Main(string[]?args)
{
//?創建集合並向集合中添加壹些元素
List<Person>?list?=?new?List<Person>();
list.Add(new?Person?{?Name?=?"Li",?Age?=?23?});
list.Add(new?Person?{?Name?=?"Xu",?Age?=?21?});
list.Add(new?Person?{?Name?=?"Jin",?Age?=?24?});
//?p0引用集合元素0
Person?p0?=?list[0];
//?p1引用集合元素1
Person?p1?=?list[1];
//?清除集合
list.Clear();
//?集合清除後,p0和p1仍然有效,所以以下語句可以輸出,不會出錯
Console.WriteLine(p1.Name);
Console.WriteLine(p2.Name);
}
}
}
結論:單純清除集合元素,不能保證內存不泄漏。能否徹底釋放對象,關鍵在於對這個對象的引用次數是否為零!在上面的程序中,集合雖然被清除了,但原來集合中元素0和元素1仍然被p0和p1引用著,所以,兩個對象依然有效