空间和时间的权衡,通常是指内存空间和CPU时间的权衡。
为了更好的优化算法,减少运算时间。某种程度上需要花费更多的内存空间。为了尽量节省内存空间,常常会采用一些算法保证,但牺牲的却是宝贵的CPU运算时间。因此,程序对于内存的管理是相当重要的。C语言采用malloc和free函数,而C++语言采用new和delete运算符。
条款5:对应的new和delete要采用相同的形式
评论:杜绝数组类型用typedefs,数组对象采用delete [] array释放。采用typedefs,常会混淆视听,导致释放内存错误,引起内存泄露。
条款6:析构函数里对指针成员调用delete
评论:既然构造函数里面通过new申请的内存资源,在析构函数里面就必须通过delete释放掉。内存泄露虽然一开始不被注意,但是大型软件长时间运行如果出现内存泄露,定位会非常困难,而且费时费力,用户体验也会非常差。这点是需要在程序设计中避免的。
重点:new和delete常规注意事项(条款7,8,9,10)
1) c++标准要求,即使在请求分配0字节内存时,operator new也要返回一个合法指针(条款8)。
2) “错误”数量的内存分配请求转给标准operator new来处理(条款8)。
3) 预先准备好内存不够的情况(条款7)。
注释: 恰当的使用set_new_handler函数。operator new内部包含一个无限循环。跳出循环的唯一办法是内存分配成功或出错处理(new-handler(出错处理函数);抛出了一个std::bad_alloc异常)。如果不做,operator new里面的循环就不会结束。4) 务必实现operator new/operator new[]和operator delete/operator delete[]函数,并成对实现(条款8,10)。(注:[]主要用于数组形式内存分配和释放)
5) 避免不小心隐藏了标准形式的new(见条款9)
注释:在类里写一个支持标准new调用方式的operator new,它和标准new做同样的事。或者,为每一个增加到operator new的参数提供缺省值(见条款24)
第一章:从C转向C++ (Effective C++ Second Edition 读书笔记)
第二章:内存管理(Effective C++ Second Edition 读书笔记)
第三章:构造函数,析构函数和赋值操作(Effective C++ Second Edition 读书笔记)
第四章 类和函数:设计与声明(Effective C++ Second Edition 读书笔记)
第五章 类和函数:实现(Effective C++ Second Edition 读书笔记)
本文深入探讨了C++中内存管理的关键概念,包括空间与时间的权衡、new和delete的正确使用、析构函数中的内存释放以及新旧版条款的注意事项。详细解释了如何避免内存泄露和不当的内存分配,提供了关于构造函数、析构函数和赋值操作的实用建议。
4770

被折叠的 条评论
为什么被折叠?



