代码之家  ›  专栏  ›  技术社区  ›  Post Self

std::是否可以退出泄漏内存?

  •  1
  • Post Self  · 技术社区  · 7 年前

    为了回答我的问题,我进行了一些测试:

    #include <cstdlib>
    #include <memory>
    

    我做了一个函数,调用 std::exit ,带有 std::unique_ptr main 作用

    void some_function()
    {
        std::exit(EXIT_SUCCESS);
    }
    
    int main()
    {
        std::unique_ptr<int> relying_on_raii{new int{5}};
    }
    

    如果我打电话 some_function 之后 unique_ptr 声明时,内存可能会泄漏。

    Dr. Memory 在以下行中有所不同:

    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)
    

    可以看出,在第二个示例中,发生了第7次潜在泄漏,大小为4字节,正好是 int 805 byte(s) 在测试中 标准::退出 .

    标准::退出 使用安全的函数,还是应该始终从main返回以防止内存泄漏?

    1 回复  |  直到 7 年前
        1
  •  2
  •   R Sahu    7 年前

    那么,std::exit是一个可以使用的安全函数,还是应该始终从main返回以防止内存泄漏?

    不过,这是一个不那么令人担忧的问题。更重要的问题是,如果您的程序获取了无法通过关闭进程来释放的资源。为了处理这种情况,最好返回一些错误状态,直到您能够退出 main 或使用 try-throw-catch 为了确保 能够优雅地捕捉所有未捕获的异常和退出。