zoukankan      html  css  js  c++  java
  • Effective C++ 条款13

    以对象管理资源

    资源的种类非常多,动态分配的内存、文件描写叙述器、相互排斥锁、图像界面中画刷、数据库连接、网络socket等。

    资源通常是有限的。当你不用时,必须释放。不然就会造成资源浪费。更严重的情况下,非法占有全部资源导致程序崩溃。

    那么我们怎么样才干合理使用资源?换句话说我们应该怎么样才干做到资源的释放?
    本节的核心点是:利用析构函数自己主动调用机制实现资源的合理释放。

    举个样例:

    class Investment//基类
    {
        ……
    };
    
    Investment* CreateInvestment()
    {
        ……
    }
    
    void fun()
    {
        Investment* pInv=CreateInvestment();
        ……
        delete pInv;//释放资源
    }

    请问你能确保上面的Investment资源能释放吗?非常明显你不能保证。可能fun函数中有return语句。或者异常出现,造成无法运行delete pInv语句,就会造成内存泄露。

    那么怎样避免,这里作者提出的方法就是利用智能指针的特性,实现资源合理释放。


    例如以下:

    void fun()
    {
        auto_ptr<Investment> pInv(CreateInvestment());
        ……
    
    }

    auto_ptr指针会有资源的唯一使用权。当auto_ptr指针给其它指针赋值时,对资源的使用权将被剥夺。

    由于pInv是局部变量,一旦出了fun函数范围就会释放,它的析构函数会调用所含资源的delete语句,触发资源的析构函数,实现资源的释放。

    另外另一个智能指针shared_ptr也能实现该功能。

    它会记录有多少个对象在使用资源。当使用资源的计数器为零时。就会释放资源。而且应用面更广。

  • 相关阅读:
    vue报错:Not Found
    使用Vue DevTools 插件报错的问题:Vue.js is detected on this page. Open DevTools and look for the Vue panel.
    Linux安装docker
    asp.net5.0源码(Microsoft github源码)
    探索Asp net core3中的 项目文件、Program.cs和通用host(转)
    c#中的sealed关键字
    .NET平台常见技术框架整理汇总
    疫情下孩子的网课
    常系数齐次线性递推
    【2021~2022】模拟赛乱写 Period I
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7027288.html
Copyright © 2011-2022 走看看