C++ std::能否退出泄漏内存?
为了回答我的问题,我进行了一些测试: 要复制,必须包含以下内容C++ std::能否退出泄漏内存?,c++,memory-leaks,raii,C++,Memory Leaks,Raii,为了回答我的问题,我进行了一些测试: 要复制,必须包含以下内容 #include <cstdlib> #include <memory> 如果在unique_ptr声明之后调用某个_函数,内存可能会泄漏 我从中获得的两个日志在以下行中有所不同: 1 potential leak(s) (suspected false positives) […] 6 unique, 6 total, 797 byte(s) of still-rea
#include <cstdlib>
#include <memory>
如果在unique_ptr声明之后调用某个_函数,内存可能会泄漏
我从中获得的两个日志在以下行中有所不同:
1 potential leak(s) (suspected false positives)
[…]
6 unique, 6 total, 797 byte(s) of still-reachable allocation(s)
vs
可以看出,在第二个示例中,发生了第七个潜在泄漏,大小为4字节,这正是int的大小。当我使用double重复此测试时,在使用std::exit的测试中,它实际上是805字节
那么std::exit是一个可以使用的安全函数,还是应该始终从main返回以防止内存泄漏呢
那么std::exit是一个可以使用的安全函数,还是应该始终从main返回以防止内存泄漏呢
是的,它会泄漏内存
不过,这是一个不那么令人担忧的问题。更重要的问题是,如果您的程序获得了无法通过关闭进程来释放的资源。要处理这种情况,最好返回一些错误状态,直到您能够从main退出,或者使用try-throw-catch确保main能够捕获所有未捕获的异常并正常退出。如果您调用exit,泄漏仍然是一个主要问题吗?如果你想把这堆东西解开。抛出一个只有main才能捕获的异常。@StoryTeller我想使用std::exit作为退出程序的常规方式,因为我必须调用return 3次,并检查bool值,是否重新运行,而且使用std::exit似乎更容易。抛出是一个有趣的想法,但是抛出一个成功的退出似乎是一个黑客。如果程序退出,有什么泄漏?操作系统将清理这个过程。老实说,一个成功的退出不是通过返回本身就是一种黑客行为。@StoryTeller是吗?从4层函数中返回不是更麻烦吗?
1 potential leak(s) (suspected false positives)
[…]
6 unique, 6 total, 797 byte(s) of still-reachable allocation(s)
1 potential leak(s) (suspected false positives)
[…]
7 unique, 7 total, 801 byte(s) of still-reachable allocation(s)