我试图找出
terminate
、exit
和 abort
之间的区别以及
我的 Google 搜索中出现了 C++ 终止 文档,该文档比较了 exit
与 abort
与 atexit
。
我读了比较
exit
和 abort
的第一部分,它很有意义。
exit 和 abort 的区别在于 exit 允许 C++ 要进行的运行时终止处理(全局对象 析构函数被调用)。 abort 立即终止程序。这 abort 函数绕过初始化的正常销毁过程 全局静态对象。它还绕过任何特殊处理 是使用 atexit 函数指定的。
然后还有
return
和exit
与这个示例代码的对比以及相应的解释:
// return_statement.cpp
#include <stdlib.h>
struct S
{
int value;
};
int main()
{
S s{ 3 };
exit( 3 );
// or
return 3;
}
上例中的 exit 和 return 语句具有类似的作用 行为。两者都终止程序并将值 3 返回给 操作系统。不同之处在于 exit 不会破坏 自动变量
,而 return 语句则如此。s
我是否误解了或者有错误,因为我认为当
s
被调用时exit
也会被销毁?
如果
s
没有被销毁,我们如何从堆栈中回收这块内存?如果 s
在堆上,我们也会泄漏这段内存吗?
我并不是在寻找特定于 Microsoft 的解决方案。我刚刚找到源代码并意识到 Microsoft 确实为像我这样的初学者提供了很好的文档。
全局对象被销毁;本地对象不是。例如这段代码:
#include <stdio.h>
#include <stdlib.h>
class Foo {
char const *s;
public:
Foo(char const *s) : s(s) {}
~Foo() { fprintf(stderr, "cleaning up %s object\n", s); }
};
Foo f("global");
int main() {
Foo g("local");
exit(0);
}
产生此输出:
cleaning up global object