Effective C++
werben
只用一样东西,不明白它的道理,实在不明智。
展开
-
Effective C++学习笔记-内存管理
条款10:如果写了operator new就要同时写operator delete 这样做是为了效率,也就是当一个类的size很小的时候,如果需要频繁的new和delete对象,也即大量的分配释放小的内存块,这样不仅会造成系统内存碎片,性能也会很差。这个时候我们可以在new第一个对象的时候分配一个很大的Pool资源池,这样在接下来频繁的new这个对象时,就从这个资源池里分内存就行而不是调用::o原创 2013-03-01 21:25:49 · 495 阅读 · 0 评论 -
条款8:写operator new和operator delete时要遵循常规
1. 首先我被一个问题所困恼:条款7中的operator new是这么写的,但条款8中的new却多了一个while。回头再仔细看下条款7,原来条款7中的operator new只处理了第一次分配内存失败的异常。 //条款7中的operator new template void* NewHandlerSupport::operator new(size_t size) {原创 2012-06-11 17:34:38 · 502 阅读 · 0 评论 -
条款7:预先准备好内存不够的情况
1. operator new在无法完成内存分配请求时会抛出异常(在以前或者某些特定情况(声明nothrow)下new会返回0) 2. 使用C语言的宏定义处理会是这样 #define NEW(PTR, TYPE) \ try {(PTR) = new TYPE; } \ catch (std::bad_alloc&) { assert(0); } 3. 用C+原创 2012-06-11 16:43:07 · 754 阅读 · 0 评论 -
条款9:避免隐藏标准形式的new
如果在类里增加一个带多个参数的operator new函数,则标准的operator new(size_t size)将会屏蔽 解决方法如下: 1. 如果写了一个多带参数的operator new函数,则也写一个和标准new同样参数的new函数 class X { private: //... public: void* operator new(size_t size, new_h原创 2012-06-12 17:19:14 · 479 阅读 · 0 评论