美文网首页
资源管理 条款13:以对象管理资源

资源管理 条款13:以对象管理资源

作者: robotai | 来源:发表于2020-09-30 07:00 被阅读0次

    总结:

    为防止资源泄露,使用RAII对象管理资源,在构造函数中,获取资源,在析构函数中释放资源;

    常用RAII class  std::auto_ptr (复制时,指向的资源让渡后指向NULL)  std::tr1::shared_ptr;

    知识细节记录:

    1、不使用对象管理获得的资源,存在释放失败获得的资源的风险

    void f()

    {

            Investment* pInv = createInvestment( ); //调用工厂函数

            ...

            delete pInv;     //因前面的语句意外退出,可能执行不到这句。

    }

    2、把资源放进对象内,可依赖C++的析构函数自动调用机制来确保资源被释放;

    3、智能指针可以作为资源管理对象。

    std::auto_ptr<Investment> pInv(createInvestment( ));

    4、RAII定义

    5、管理对象运用析构函数确保资源被shif。

    6、auto_ptr 复制后,资源让渡

    std::auto_ptr<Investment> pInv1(createInvestment( ));  //pInv1 指向资源

    std::auto_ptr<Investment> pInv2(pInv1);   //现在 pInv2 指向资源,pInv1指向NULL

    pInv1 = pInv2;    //现在 pInv1 指向资源,pInv2指向NULL

    7、auto_ptr 不适合需要复制行为的资源的使用,比如STL容器。

    8、RCSP  引用计数智慧指针,支持复制  tr1::shared_ptr.

    9、auto_ptr 、tr1::shared_ptr 析构函数内做的是delete 不是 delet[]动作,不适合动态分配的资源管理,

    比如 new int[10]

    相关文章

      网友评论

          本文标题:资源管理 条款13:以对象管理资源

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