【发布时间】:2019-04-27 23:04:40
【问题描述】:
正如Factory Pattern、Builder Pattern等都是Creational Patterns。
是否存在任何析构函数模式?
如果有的话……说出一些名字。
【问题讨论】:
标签: design-patterns architecture software-design
正如Factory Pattern、Builder Pattern等都是Creational Patterns。
是否存在任何析构函数模式?
如果有的话……说出一些名字。
【问题讨论】:
标签: design-patterns architecture software-design
在像 C++ 这样具有手动内存管理的语言中,析构函数的存在是为了清理分配的对象、打开的文件句柄等资源。
如果对象 A 引用了对象 B 并且 A 负责 B 的生命周期> 然后在它的析构函数A 必须调用delete B,这样它的析构函数就叫做an等等。这可确保删除作为 A 一部分分配的所有对象并将内存返回给系统,否则会导致内存泄漏。
在具有自动内存管理(垃圾收集)的语言中,对象不需要删除它包含的其他对象,因为系统将删除所有未使用的对象。
在那些语言中,对象仍然可以分配资源,如文件、获取锁、启动计时器等,因此当不再需要它们释放这些资源时需要执行操作。
在这些语言中使用The Dispose pattern。
在一般情况下,此模式由释放这些资源且必须调用的方法(Close、Destroy、Release 等)组成。通常在 try {} catch{} finnaly {} 构造的 finnaly {} 块中使用。
C# 具有 IDisposable 接口,可以与 using 声明一起使用,因此它有一个内置支持。
据我所知,Java 7 引入了AutoClosable,我对 Java 没有太多经验,但它与 try { } finally { }
一起使用在 C# 中,您还可以添加一个终结器,而不是在对象被垃圾回收时调用。您可以使用此终结器来释放资源或添加断言对象在 GC 之前已正确处理以捕获错误。我用它来捕获分配重要资源的对象的错误,并且很难找出错误的来源。
【讨论】: