【摘要】 即将参加全国计算机等级考试的考生们,考试即将到来,大家的备考工作进行得如何了?考必过为大家精心整理了2020年全国计算机二级C++复习知识点:重载new[]和delete[],希望能够助力全国计算机等级考试,相信坚持一定会有成果。那么,同学们一起快来做题吧!关于2020年全国计算机二级C++复习知识点:重载new[]和delete[]的具体内容如下:
2020年全国计算机二级C++复习知识点:重载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考虑
以上就是考必过为大家整理的2020年全国计算机二级C++复习知识点:重载new[]和delete[]的具体内容。没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。你必须特别努力,才能显得毫不费力。最后,考必过预祝大家在未来的全国计算机等级考试中能够取得优异的成绩!