求学快递网是国内领先的B2M2C教育培训网上信息平台!

首页 | 分站加盟 | 课程发布 | 最新课程 | 最新机构 | 培训专题 | 全国分站 | 帮助中心

计算机等级考试_计算机等级考试报名_计算机考试成绩查询_求学快递网

计算机等级考试一步到位
您的位置:求学快递网 > 计算机等级考试 > 考试辅导 > 计算机二级 > 计算机C++知识点:重载new[]和delete[] - 正文内容

计算机C++知识点:重载new[]和delete[]

 计算机C++知识点:重载new[]和delete[]

 

求学快递网计算机等级考试专题重点推荐:2016年计算机级考试报考时间 2016年计算机二级考试证书领取时间2016年计算机二级考试报考指南2016年计算机二级考试大纲2016年计算机二级考试政策2016年计算机二级考试报考条件2016年计算机二级考试科目等最新新闻资讯。

 

      重载new[]和delete[] 
  对于上面的程序,假如有下面的语句: 
   Names *nms=new Names[10] 
   ... 
   delete [] nms; 
  那么,这些语句会调用全局new和delete运算符,而不是重载过的new和delete。为了重载能为对象数组分配内存的new和delete运算符,必须像下面的程序一样,对new[]和delete[]也进行重载。 
   #include iostream.h 
   #include string.h 
   #include stddef.h 
   #include new.h 
   const int maxnames = 5; 
   class Names 
   { 
   char name[25]; 
   static char Names::pool[]; 
   static bool Names::inuse[maxnames]; 
   public: 
   Names(char* s) { strncpy(name,s,sizeof(name)); } 
   void* operator new(size_t) throw(bad_alloc); 
   void operator delete(void*) throw(); 
   void display() const { cout < };
   char Names::pool[maxnames * sizeof(Names)]; 
   bool Names::inuse[maxnames]; 
   void* Names::operator new[](size_t size) throw(bad_alloc) 
   { 
   int elements=size/sizeof(Names); 
   int p=-1; 
   int i=0; 
   while((i { 
   if(!inuse[i]) p=i; 
   ++i; 
   } 
   // Not enough room. 
   if ((p==-1) || ((maxnames-p) for(int x=0; x return pool+p*sizeof(Names); 
   } 
   void Names::operator delete[](void* b) throw() 
   { 
   if(b!=0) 
   { 
   int p=((char*)b- pool)/sizeof(Names); 
   int elements=inuse[p]; 
   for (int i=0; i } 
   } 
   int main() 
   { 
   Names* np = new Names[maxnames]; 
   int i; 
   for(i=0; i { 
   cout < char name[25];
   cin >> name;
   *(np + i) = name; 
   } 
   for(i=0; idisplay(); 
   delete [] np; 
   return 0; 
   } 
  重载new[]和delete[]要比重载new和delete考虑更多的问题。这是因为new[]运算符时为数组分配内存,所以它必须记住数组的大小,重载的delete[]运算符才能正确地把缓冲区释放回内存池。上面的程序采用的方法比较简单,吧原来存放缓冲区使用标志的布尔型数组换成一个整型数组,该数组的每个元素记录new[]运算符分配的缓冲区个数,而不再是一个简单的true。当delete[]运算符函数需要把缓冲区释放回内存池时,它就会用该数组来确认释放的缓冲区个数

 

 

 

关注求学快递网计算机等级考试专题,帮你了解最新的2016年计算机二级考试资讯服务2016计算机二级考试成绩查询,让你轻松备考计算机等级考试!

求学快递网计算机等级考试专题的小编们根据网民搜索喜爱,第一时间公布2016年计算机二级模拟试题2016年计算机二级考试应试技巧计算机二级考试历年真题2016年计算机二级考试章节复习供广大求学爱好者学习使用,欢迎继续关注求学快递网计算机等级考试专题,并给我们提供宝贵的意见!

 

相关推荐

计算机等级考试最新机试技巧
计算机等级考试高效利用技巧

最新计算机资讯

热点专题

计算机等级考试经验技巧分享

关于本站  诚征英才  广告服务  招生服务  免责声明  分站加盟  VIP会员  联系我们  网站地图  网站记事

版权所有 CopyRight 2008-2017 粤ICP备14009694号 www.studyems.com, Inc. All Rights Reserved
违法和不良信息举报邮箱:2881796407@qq.com 举报电话: