effective C++笔记之条款8: 写operator new和 operator delete 时要遵循常规
2012-03-08 14:23
302 查看
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;
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++笔记之条款9、10:避免隐藏标准形式的new、如果写了operator new 就要同时写operator delete
- 条款10: 如果写了operator new就要同时写operator delete (转自effective c++ second edition)
- 条款八: 写operator new和operator delete时要遵循常规
- 条款8:写operator new和operator delete时要遵循常规
- 条款8: 写operator new和operator delete时要遵循常规
- 条款8: 写operator new和operator delete时要遵循常规
- Effective C++学习笔记:写operator new和operator delete时要遵循常规
- Effective C++:条款8: 写operator new和operator delete时要遵循常规
- effective C++笔记之条款38: 绝不要重新定义继承而来的缺省参数值
- Effective C++笔记_条款43 学习处理模板化基类内的名称
- Effective C++笔记(一)——条款26-29
- effective C++笔记之条款44: 说你想说的;理解你所说的
- effective C++笔记之条款46: 宁可编译和链接时出错,也不要运行时出错
- effective C++笔记之条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
- Effective C++笔记 条款18
- EffectiveC++学习笔记-条款48
- 写operator new和operator delete时要遵循常规
- Effective C++笔记(5)—条款7/8/9
- effective C++笔记之条款45: 弄清C++在幕后为你所写、所调用的函数
- EffectiveC++学习笔记-条款3