【问题标题】:When I need to declare my own destructor? [duplicate]什么时候需要声明自己的析构函数? [复制]
【发布时间】:2011-12-13 23:00:33
【问题描述】:

如果class 不存在用户定义的析构函数并且需要一个析构函数,则编译器会隐式声明析构函数。什么时候需要声明自己的析构函数?

【问题讨论】:

  • 不存在“并且需要一个”条件:一个类总是有一个析构函数。
  • 但并不总是用户定义的析构函数。
  • here

标签: c++ oop destructor


【解决方案1】:

如果您在构造函数中或之后分配内存、创建对象或执行其他任何操作,则需要在对象被破坏时进行清理。

【讨论】:

    【解决方案2】:

    当隐式声明的析构函数不能满足你的需要时。

    这有点牵扯。您应该查找并研究rule of three

    【讨论】:

    • 与其发布指向 Google 的链接,不如发布指向 this excellent SO-question 的链接,详细介绍该主题。
    • 当我这样做时,它在搜索结果中排名第四。 :)
    • 另外,这里没有涉及的一个主题是,如果你想要一个多态类,你需要声明一个空的虚拟析构函数。
    • 我一般同意三的规则,但值得一提的是,过去提供用户定义的析构函数和赋值运算符的很多情况都被智能使用 RAII 消除了作为成员的类。
    • @James:作为设计原则,我认为甚至可以说“所有情况”,而不仅仅是“很多情况”。也就是说,只有 RAII 类应该有析构函数,而 RAII 类应该只管理一个资源的生命周期,而不做其他任何事情。
    【解决方案3】:

    当你想确保某事完成时。 “某事”通常是关闭网络连接或文件或释放一些内存等......

    【讨论】:

      【解决方案4】:

      每次您必须在对象销毁时执行特殊任务,即:内存释放、关闭网络连接、递减计数引用、线程同步、抛出存储的异常等。

      【讨论】:

      • "throw stored exceptions" - 一个警告,从析构函数中抛出并不是你想要轻易做的事情!很难避免您的程序将terminate 而不告诉您任何有用的情况,尽管在有限的情况下是可能的。
      猜你喜欢
      • 2014-08-01
      • 2014-04-24
      • 2018-07-03
      • 2013-09-04
      • 2019-11-05
      • 1970-01-01
      • 2016-10-29
      • 2019-03-01
      • 2011-07-26
      相关资源
      最近更新 更多