美文网首页
智能指针std::shared_ptr初始化时可能泄露的地方

智能指针std::shared_ptr初始化时可能泄露的地方

作者: b036101467d7 | 来源:发表于2019-05-27 12:10 被阅读0次

    如果一个函数的参数需要一个智能指针,而我们在调用该函数时才生成该指针,而其他参数也有函数调用,如果其他参数的函数调用,出现异常,则会使用智能指针内存泄漏,例如:

    process(std::shared_ptr<Tool>(new Tool), getParameter());
    

    上述调用,如果getParameter调用出现异常的话,std::shared_ptr<Tool>(new Tool)可能导致内存泄漏。

    因为上述std::shared_ptr<Tool>(new Tool)执行分成两部分:

    1. new Tool
    2. std::shared_ptr的构造函数

    如getParameter()的指针穿插在上述两部之间,并出现异常,则new Tool的内存将被泄漏。

    正确的做法,构造完std::shared_ptr之后,再调用:

    std::shared_ptr<Tool>  mTool(new Tool);
    
    process(mTool, getParameter());
    

    更建议使用std::make_shared,因为std::make_shared的内存分配与std::shared_ptr的构造是在一起的:

    process(std::make_shared<Tool>(),  getParameter());
    

    相关文章

      网友评论

          本文标题:智能指针std::shared_ptr初始化时可能泄露的地方

          本文链接:https://www.haomeiwen.com/subject/gvnctctx.html