【问题标题】:Destructors called upon program termination程序终止时调用的析构函数
【发布时间】:2009-12-25 21:48:42
【问题描述】:

在 main() 函数中创建对象时,是否会在程序终止时调用其析构函数?我会假设是因为 main() 仍然有一个范围(整个程序),但我只是想确定一下。

【问题讨论】:

    标签: c++ destructor


    【解决方案1】:

    这取决于您的程序如何终止。如果它通过 main 返回而终止(通过显式返回或从末尾下降),那么是的,main 中的任何自动对象都将被破坏。

    但是如果你的程序通过调用 exit() 终止,那么 main 实际上并没有超出范围,任何自动对象都不会被破坏。

    【讨论】:

    • 在任何函数中使用exit都是如此,不是吗?
    • @Benoit - 是的,调用 exit 不会展开堆栈。如果你调用 exit,任何函数中的未完成的自动变量都不会被破坏。
    • 是的。如果程序正常终止,则调用析构函数进行清理。这可以通过附加调试器或将 printf 放入析构函数中轻松观察到。
    【解决方案2】:

    main() 中的声明范围不是整个程序。它的行为就像任何正常功能一样。所以,是的,本地类对象的析构函数按预期执行。除非程序异常终止。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多