首页 > 解决方案 > 软件架构中的析构函数模式

问题描述

正如工厂模式建造者模式等都是创造模式一样。

是否存在任何析构函数模式

如果有的话……说出一些。

标签: design-patternsarchitecturesoftware-design

解决方案


在像 C++ 这样具有手动内存管理的语言中,析构函数的存在是为了清理分配的对象、打开的文件句柄等资源。

如果对象A引用了对象B并且A对B的生命周期负责,那么在它的析构函数中A 必须调用delete B,因此它的析构函数被称为 an 等等。这确保了作为A的一部分分配的所有对象都被删除,并将内存返回给系统,否则会出现内存泄漏。

在具有自动内存管理(垃圾收集)的语言中,对象不需要删除它包含的其他对象,因为系统将删除所有未使用的对象。

在这些语言中,对象仍然可以分配资源,如文件、获取锁、启动计时器等,因此当不再需要它们释放这些资源时需要执行操作。

在这些语言中,使用了 Dispose 模式

在一般情况下,此模式由释放这些资源且必须调用的方法(Close、Destroy、Release 等)组成。通常它用在 try {} catch{} finnaly {} 构造的 finnaly {} 块中。

C# 具有可与using声明一起使用的IDisposable接口,因此它具有对它的内置支持。

据我所知,我对 Java 没有太多经验,Java 7 引入了AutoClosable,但它与 try { } finally { } 一起使用

在 C# 中,您还可以添加一个终结器,而不是在对象被垃圾回收时调用。您可以使用此终结器来释放资源或添加断言对象在 GC 之前已正确处理以捕获错误。我用它来捕获分配重要资源的对象的错误,并且很难找出错误的来源。


推荐阅读