解释
析构函数无需手动调用,会在垃圾回收、释放资源时自动调用。
析构函数作用于析构类的“实例”。
定义范围:
不能在结构中定义析构函数。只能对类使用析构函数。
一个类只能有一个析构函数。
无法继承或重载析构函数。
无法调用析构函数。它们是被自动调用的。
析构函数既没有修饰符,也没有参数。
写法(类似构造函数,多一个 ~ 符号):
class Destructor
{
~Destructor()
{
//...
}
}
功能:可以在对象被释放时,执行某些事情
class Destructor
{
public int ID { get; set; }
~Destructor()
{
//在析构函数中,可以执行释放其他托管资源处理
Debug.Log($"当前对象被释放,ID={ID}");
}
}
public class Test: MonoBehaviour
{
void Start()
{
var obj = new Destructor();
obj.ID = 100;
obj = null; //置空后GC才知道需要释放
//手动调用GC垃圾回收
Debug.Log("手动触发垃圾回收>");
GC.Collect(); //释放内存操作,是异步执行的
Debug.Log(obj == null);
}
}
打印结果:
根据打印时间可以知道,GC释放是异步进行,需要一定时间才能完成,释放成功后会自动调用析构函数,执行其内部语句
设计
在对象被释放的时候抛出一些通知,或者执行一些关联释放逻辑