Effective C++读书笔记(3)

发布时间:2016-12-9 0:13:13 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Effective C++读书笔记(3)",主要涉及到Effective C++读书笔记(3)方面的内容,对于Effective C++读书笔记(3)感兴趣的同学可以参考一下。

(1)为了防止内存泄露,应该使用RAII(资源在构造期间获得,在析构期间释放)         原理:出于堆中的资源,被一个指针指向,若该资源仅仅在一个局部内被使用,而又忘记delete的娿,会造成内存泄露。                     而对象在生命周期结束时会自动调用析构函数,所以可以将资源封装到对象内,使用对象自动调用析构函数的特性自动delete资源。         常用的智能指针:                 std::tr1::shared_ptr                  std::auto_ptr (2)在创建自己的RAII class时,要记得处理copying行为         常用:抑制copying(第五条,把copying构造函数设置为private)                    施行引用计数法(用shared_ptr代替原来的指针)——shared_ptr可以指定删除器(一个函数或者函数对象)         常用指针中的复制处理:                 tr1::shared_ptr 复制底部资源(复制管理对象+资源),引用计数                 auto_ptr 转移底部资源所有权  (3)显示和隐式转换函数的写法:         如Font拥有一个FontHandle对象         显示:FontHandle get() const { return f;}         隐式:operator FontHandle() const { return f; }         注:APIs旺旺要求访问原始资源(raw resources)所以每一个RAII class应该提供一个“取得其所管理资源”的方法 (4)不要随意typedef一个数组,这回导致delete混乱         例:typedef std::string AddressLines[4];                 此时AddressLines是一个数组,所以                 std::string* pal = new AddressLines; //返回一个String* new AddressLines,相当于new std::string[4]                 所以此处必须匹配delete[]才能删除:delete[] pal; (5)以独立语句将newed对象存储于智能指针内         理由:编译器对于“跨越语句的各项操作”没有重新排列自由,只有在语句内才拥有这个自由度 std::tr1::shares_ptr<Widget> pw(new Widget);  processWidget(pw, priority());                                        两行 processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());                     一行             若在std::tr1::shared_ptr<Widget>(new Widget)中,             执行了(1)new Widget                         (2)priority,                         (3)std::tr1::shared_ptr<Widget>             如果priority执行过程中出现了错误,则会造成new Widget出来的指针将会遗失             即在“资源被创建”和“资源被转移为资源管理对象”两个时间点之间有可能发生异常干扰

上一篇:Android中的AutoCompleteTextView组件
下一篇:MFC之API(3)

相关文章

相关评论