Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::能否退出泄漏内存?_C++_Memory Leaks_Raii - Fatal编程技术网

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)