【问题标题】:Destructor patterns in software architechture软件架构中的析构模式
【发布时间】:2019-04-27 23:04:40
【问题描述】:

正如Factory PatternBuilder Pattern等都是Creational Patterns

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

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

【问题讨论】:

    标签: design-patterns architecture software-design


    【解决方案1】:

    在像 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 之前已正确处理以捕获错误。我用它来捕获分配重要资源的对象的错误,并且很难找出错误的来源。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      相关资源
      最近更新 更多