如何写出高效C++(资源管理)

来源:互联网 发布:淘宝上最火的男模特 编辑:程序博客网 时间:2024/07/24 01:33

资源定义:所谓资源,就是一旦用了它,将来必须换给系统。

常见资源:内存,文件描述器,互斥锁,图形界面中的字型和笔刷,数据库连接以及网络sockets。


13.以对象管理资源

为了防止内存泄漏(1)可以使用RAII(资源获取就是初始化)对象,它们在构造函数中获得资源并在析构函数中释放资源。

                            (2)两个常被用的RAII classes分别是tr1::shared_ptr和auto_ptr,前者是较佳选择(因为auto_ptr并不容许多个指针指向同一资源),因为前者的copy行为比较直观,若是auto_ptr,复制动作会使它(被复制物)指向NULL。


14.在资源管理中小心copying行为

当一个RAII对象被复制,有以下两种可能:

(1)禁止他复制

(2)对底层资源(希望保有的资源)祭出"引用计数法"


对于RAII对象必须一并赋值它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。

普遍而常见的RAII class copying行为是:抑制copying,施行引用计数法。不过其他行为也都可能被实现,主要看具体情况。


15.在资源管理类中提供对原始资源的访问

原因:程序接口有要求访问原始资源的时候,所以每一个RAII class应该提供一个"取得其所管理之资源"的办法。

对原始资源的访问可能经由显示转换或隐式转换,一般而言显式转换比较安全,但是隐式转换更为方便。

显式转换:

class Font

{

     public:

              ...

             FontHandle get() const { return f;}

             ...

}

changeFontSize(f.get(),newFontSize);

隐式转换:

class Font

{

     public:

              ...

             operator FontHandle() const { return f;}

             ...

}

changeFontSize(f,newFontSize);

16.成对使用new和delete时要采取相同形式(如果你在new表达式中使用[],必须在相应的delete表达式中也使用[].如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[])

当你使用new的时候:

(1)内存被分配出来

(2)针对内存会有一个(或更多)构造函数被调用。

当你使用delete的时候:

(1)针对内存会有一个(或更多)析构函数被调用

(2)内存被释放

delete之内存在的最大问题在于:即将被删除的内存之内究竟存在多少对象?

std::string* a = new std::string;

std::string* b = new std:::string[100];

delete a;//删除一个对象

delete [] b;//删除一个由对象组成的数组


17.以独立语句将newed对象置入智能指针

std::tr1::shared_ptr<Widget> pw(new Widget);

processWidget(pw,priority());














0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 住房商业贷款利率 佛山住房公积金管理中心 四川住房城乡建设厅 西安住房公积金管理中心 住房公积金贷款额度 沧州住房公积金查询 个人住房公积金查询入口 银行住房贷款利率计算器 合肥市住房公积金管理中心 山东省住房和城乡建设厅 2019商业住房贷款利率 住房和城乡建设部 长春住房公积金 四川省住房城乡建设厅首页 新乡市住房公积金管理中心 住房贷款利率计算器 邵阳市住房公积金管理中心 邵阳住房公积金 商业住房贷款利率 陕西省住房公积金管理中心 合肥住房公积金管理中心 长春市住房公积金 山东省住房城乡建设厅 2019各银行住房商贷利率一览表 住房公积金查询入口 陕西省住房和城乡建设厅网 沧州住房公积金个人查询入口 包头市住房公积金管理中心 佛山住房公积金中心 个人住房商业性贷款 住房公积金装修贷款能贷多少 邵阳住房公积金管理中心 工资4000住房公积金一般交多少 西安住房保障管理局网站 佛山住房公积金 住房城乡建设部 河南省住房和城乡建设厅网 北京住房公积金 广州住房公积金管理中心 西安住房公积金 成都住房公积金管理中心