2016-08-24 92 views
1

在程序崩溃时,如何使用诸如unique_ptr的智能指针知道释放资源的C++项目?智能指针如何知道何时释放程序崩溃时的资源?

+1

你想查找堆栈展开。并且更准确地定义_crash_。无论如何,如果程序中止所有的内存将会到达操作系统。 –

+0

这取决于“崩溃” - 终止不会展开堆栈,因此析构函数不会被调用。这里有一些人格思考(关于RAII):http://stackoverflow.com/questions/76796/general-guidelines-to-avoid-memory-leaks-in-c/77893#77893 – doctorlove

回答

8

如果程序由于处理异常而“优雅地”崩溃,堆栈展开将调用任何智能指针上的析构函数并释放内存。

对于完整的崩溃(例如段错误,请致电std::terminate()),操作系统将释放程序保存的任何内存和资源。

1

当C++程序崩溃时,它退出。操作系统清除它可能要求的任何操作系统资源,其中包括内存,但也包括其他资源(例如文件句柄)。

因此,C++不会清理 - 操作系统。曾经是C++堆作为可用内存返回到操作系统。