2016-08-24 89 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++堆作爲可用內存返回到操作系統。