8.写operator new 和 operator delete 时要遵循常规。
operator new要与系统缺省的operator new 操作一致。即有正确的返回值,内存不够时要调用出错处理函数,处理好0字节内存请求的情况,避免隐藏标准形式的new。
new会多次的尝试分配内存,寄希望与每次失败后执行的出错处理函数能释放其他地方的内存以供使用。只有在出错处理函数指针为空的情况下,new才抛出异常。new在请求分配0字节内存时也要返回一个合法的指针,一般情况下,c++会将0字节认为为一个字节大小。
operator new会经常被派生类调用,所以要么在派生类中重载一个新的new,或者在基类中new函数中做一些判断,因为派生类的大小很可能与基类大小不同,而且sizeof()大小为0的情况下会返回值为1。
如果想要控制基于类的数组的内存分配,必须实现operator new[] 。
对于operator delete ,更加简单一点。对于空指针的删除永远是安全的。剩下的只要考虑增加继承支持就行了。
9.避免隐藏标准形式的new。
内部声明的名称会隐藏掉外部范围相同的名称。如果类中只重载了操作符new,如下:
static void* operator new (size_t size,new_handler p);//p为出错处理函数
而在新建对象时,
B *b1 = new (noMoreMemory)B;
B *b2 = new B;
前者正确,但后者就错误了,错误原因为此函数隐藏了 operator new,即使对于后者,其参数与函数参数不相符合,其错误提示即参数不符。
解决的方法有两种:
重载标准new调用方式operator new。
对每一个增加到operator new中的参数提供缺省值 如
static void* operator new (size_t size,new_handler p = 0);
分享到:
相关推荐
Effective C++跟more Effective c++
电子版的effective c++ 和more effective c++ c++四书五经中介绍的经典书籍
中文版 chm Effective C++ More effective C++
effective c++ & more effective c++ 纯文字版
Effective C++ & More Effective C++.chm
effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective ...
Effective c++.pdf Effective c++.pdf
Effective C++ 3rd Item 9 Effective C++ 3rd Item 9 Effective C++ 3rd Item 9 Effective C++ 3rd Item 9 Effective C++ 3rd Item 9
effective C++,第一版和第二版是中文pdf,第三版是英文的pdf
作者简介 作者:(美国)迈耶斯(Scott Meyers) 迈耶斯(Scott Meyers),二十多年来,Scott Meyers的Effective C++系列书籍(包括《Effective C++》《More Effective C++》和《Effective STL》)为C++编程语言...
More Effective C++ 35 New Ways to Improve Your Programs and Designs
Scott Meyers 的Effective C++ 和More Effective C++ 是此类佼佼,Herb Sutter 的Exceptional C++ 则是後起之秀。 这类书籍的一个共通特色是轻薄短小,并且高密度地纳入作者浸淫於C++/OOP 领域多年而广泛的经验。...
more effective c++ 中文版 pdf 资源来自网络 分享给各位学习c++
More Effective C++ 简体中文版(pdf 版).pdf
more Effective c++ 看过Essential这本书的可以看这本
essential C++ & effective C++
Effective C++中文第三版,带书签
Effective C++和More Effective C++ 高清中文
C++程序员进阶书籍Effective C++和More Effective C++,压缩包内共四本书,为中英文对照版,只有Effective C++中文版为高清影印版,其他三本都是文字版本,绝对清晰