类的operator new与operator delete的重载
2012-08-11 10:40
363 查看
为什么有必要写自己的operator new和operator delete?
答案通常是:为了效率。
缺省版本的operator new是一种通用型的内存分配器,它必须可以分配任意大小的内存块。同样,operator delete也要可以释放任意大小的内存块。operator delete想弄清它要释放的内存有多大,就必须知道当初operator new分配的内存有多大。有一种常用的方法可以让operator new来告诉operator delete当初分配的内存大小是多少,就是在它所返回的内存里预先附带一些额外信息,用来指明被分配的内存块的大小。
缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。尤其在那些需要动态分配大量的但很小的对象的应用程序里,情况更是如此。
内存池:内存池的作用主要也是为了效率。通过一次申请比较大的内存空间,来避免小空间内存的频繁申请和释放,每次需要为对象分配内存空间时,在已经申请的大空间内分配。空闲区被按照对象大小划分为若干块,块与块之间通过链表组织起来。
参考代码:
View Code
答案通常是:为了效率。
缺省版本的operator new是一种通用型的内存分配器,它必须可以分配任意大小的内存块。同样,operator delete也要可以释放任意大小的内存块。operator delete想弄清它要释放的内存有多大,就必须知道当初operator new分配的内存有多大。有一种常用的方法可以让operator new来告诉operator delete当初分配的内存大小是多少,就是在它所返回的内存里预先附带一些额外信息,用来指明被分配的内存块的大小。
缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。尤其在那些需要动态分配大量的但很小的对象的应用程序里,情况更是如此。
内存池:内存池的作用主要也是为了效率。通过一次申请比较大的内存空间,来避免小空间内存的频繁申请和释放,每次需要为对象分配内存空间时,在已经申请的大空间内分配。空闲区被按照对象大小划分为若干块,块与块之间通过链表组织起来。
参考代码:
View Code
// 表示一个飞机对象 class airplanerep: public CachedObj<airplanerep> { public: airplanerep(int id,const string & s,const string & d) { ID = id; start = s; dest = d; } ~airplanerep() { cout<<"airplanerep destructor!"<<endl; } int getID() const { return ID; } private: int ID; string start; string dest; }; int main() { airplanerep *pa = new airplanerep(101,"shanghai","beijing"); cout<<pa->getID()<<endl; delete pa; airplanerep *pb = new airplanerep(102,"shanghai","beijing"); cout<<pb->getID()<<endl; delete pb; return 0; }
相关文章推荐
- 类的operator new与operator delete的重载
- 重载operator new与operator delete构建内存池
- 类的operator new与operator delete的重载
- 从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
- 从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
- 类的operator new与operator delete的重载
- 类的operator new与operator delete的重载
- 类的operator new与operator delete的重载【转】
- 从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
- 重载operator new与operator delete构建内存池
- 重载debug版本的operator new和operator delete
- C++的三种new简介及重载局部(类内部)与全局operator new
- 从零开始学C++之运算符重载(四):类型转换运算符、*运算符重载、->运算符重载、operator new 和 operator delete
- 拨开自定义operator new与operator delete的迷雾
- [C++再学习系列] 深入new/delete:Operator new的全局重载
- 关于虚析构函数的意义以及operator new与operator delete
- 写operator new和operator delete的规则
- 拨开自定义operator new与operator delete的迷雾
- [C++再学习系列] 深入new/delete:Operator new的全局重载
- delete与delete[]的区别【C++ Primer 第4版 18.1.3 operator new函数和operator delete接口】