条款7:为内存不足的状况预做准备
作者讲了程序如何在内存不足的情况下保证做到正确的处理,可是以我自己多年的程序开发经验来看,这些处理没有什么太大的必要,至少我是从来没有这么做过:
1. 现在的机器配置相对而言应该是比较高的
2. 操作系统的能力,虚拟内存做了一些保障
3. 对于需要大量内存操作的程序,我们可能会采取一些优化方式来处理,如采用文件来模拟内存
正如作者在条款最后讲的一样,不管是采用什么样的处理方式,内存不足情况下是返回0还是返回异常都不是最重要,重要是你要对于内存分配的函数要有概念,你不能假设内存总是能够成功分配,要能够正确的处理内存不足情况。
对于如何更好的检查内存不足的情况,最好是把你的程序放到Windows98之前的操作系统中去运行,如果这样都没出现什么问题,程序基本上也就不太会有问题。
条款8:撰写operator new和operator delete时就遵行的公约
几个注意事项:
1. 正确处理内存不足的情况
2. 允许分配0字节的内存,事实上是分配出1字节的内存
3. 如果基类中实现了new和delete操作,注意继承而引起的一些问题
4. 允许delete为0的内存
我觉得第三点尤其重要,在类中设计new和delete操作时,要充分考虑到这个问题。在设计的时候也可以借鉴文中提供的例子,不过我觉得最好还是在if (size != sizeof(Base)中增加assert来出一些警示。因为很多的情况下,实现Base和Derived的可能不是同一个人,同时增加一些注释也是非常有必要的。
待续