gpt4 book ai didi

C#删除类的实例?

转载 作者:行者123 更新时间:2023-12-05 00:50:16 26 4
gpt4 key购买 nike

我是 C# 的新手,我有一个关于类实例的快速问题。有人告诉我,仅在类的实例上使用“null”不足以删除整个实例及其所有资源,例如指针等。所以我有:ClassHere myClass = new ClassHere()myClass = null

我真的想太多了...我将举一个例子来弄清楚 GC 究竟是如何工作的。

假设我们有 3 个实例:x1、x2、x3。每个实例都将映射到一个变量:ClassHere myClass = new ClassHere() 除非你有 x1、x2 和 x3 而不是 myClass。

然后说实例 x2 和 x3 对 x1 进行了某种引用。假设 x1 在被 x2 和 x3 引用后什么都不做。 GC 只会在 x2 之后拾取 x1,并且 x3 对 x1 的引用会被删除,对吗?

如果即使有这些引用它也能接受它。 GC 如何知道我是否真的需要 x2 和 x3 引用的实例 x1 而不是删除它?

或者我在这里遗漏了什么?

最佳答案

嗯,销毁一个的唯一方法是将它从你的源代码树中删除:D 你可以,但是销毁一个类的实例

与 C++ 不同,C# 没有确定性析构函数。当对象实例变得不可访问时,该对象实例变为有资格进行垃圾回收。这可以通过

  • 对它的所有引用都被释放(例如,变量超出范围),或
  • 对它的所有引用本身都是不可达的(例如,对象实例是集合中的引用,而集合本身是不可达的。

对象实例何时以及是否被垃圾回收取决于应用程序域(进程)内的内存/资源压力。但是,当应用程序域结束时,所有内容都会被垃圾回收。

通常你想让重要的事情实现IDisposable,所以持有的非托管资源可以通过使用 block 等确定性地释放。

这是一个简单的答案,但要点是:不要出汗。

关于C#删除类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com