effective C++笔记之条款8: 写operator new和 operator delete 时要遵循常规

l        自己重写operator new时,很重要的一点是函数提供的行为要和系统缺省的operator new一致。实际做起来就是:要有正确的返回值;可用内存不够时要调用出错处理函数;处理0字节内存请求的情况。此外,还要避免不小心隐藏了标准形式的new。(条款9)

l        operator new包含一个无限的循环,跳出循环的唯一办法是内存分配成功或出错处理函数完成了条款7所描述的事件中的一种:得到了更多的可用内存;安装了一个新的new-handler;卸除了new-handler;抛出了一个std::bad_alloc或其派生类型的异常;或者返回失败。如果不做,operator new里面的循环就不会结束。

l        大多数针对类所写的operatornew都是只为特定的类设计的,不是为所有的类,也不是为它所有的子类设计的。基类的operatornew可能会被调用去为另一个子类对象分配内存。解决办法为把这个错误数量的内存分配请求转给标准::operator new来处理。

l        关于数组的分配,写operatornew[],面对的是原始内存,并不知道数组里有多少个对象,每个对象有多大。

l        operator delete,C++保证删除空指针是安全的。内存释放程序要处理空指针。

l        operator delete的类成员版本,必须检查被删除的对象的大小。假设类的operator new将“错误”大小的分配请求转给::operatornew, 那么也必须将“错误”大小的删除请求转给::operatordelete;

你可能感兴趣的:(effective C++笔记之条款8: 写operator new和 operator delete 时要遵循常规)