清除双链表

Cas*_*erT 5 c# garbage-collection linked-list

我有一个双链表(队列)我自己做的.

我想知道,要清除链表,是否足以简单地删除头部和尾部参考?

例如

public void Clear()
{
    Head = null;
    Tail = null;
}
Run Code Online (Sandbox Code Playgroud)

我正在拍摄多米诺骨牌效应,但我很难测试它.它将使整个对象至少显示为空.所有数据请求(例如peek,dequeue等)都返回null.您还可以轻松地将一些新对象排入队列.纯粹的功能似乎是有效的.

但我真的很想知道我是否采取了正确的方式.

Fac*_*Vir 7

简短的回答是肯定的,垃圾收集将清除所有链表节点,只要外部没有任何内容可以引用它们.

最简单的测试方法是在链表节点对象中添加终结器,输出一些日志记录.请注意,您无法确定垃圾收集器何时运行(不通过GC.Collect()强制它),因此只要您调用Clear()方法就不会看到调用终结器.

但是,"多米诺骨牌效应"不会发生; 引用是否保存到对象并不重要,而不是引用可以追溯到堆栈或静态对象.因此,如果几个对象相互引用,但没有任何引用它们,那么它们将同时被垃圾收集.