您的位置:首页 > 编程语言 > C语言/C++

Cpp--重载全局的new和delete

2016-03-17 14:10 786 查看
#include<iostream>
#include<process.h>
#include<string.h>
#include<stdio.h>
#define MAX_SIZE 30000
char MemArr[MAX_SIZE];
char *pMem=MemArr;

void *operator new(unsigned bytes){
printf("myGlobal-operator-new!bytes=%d\n",bytes);
if(pMem+bytes<=MemArr+MAX_SIZE){
pMem+=bytes;
return(void *)(pMem-bytes);
}
else
{
printf("My-new-fail!I only have %d bytes memory now!",MemArr+MAX_SIZE-pMem);
printf("but you need %d bytes!\n",bytes);
return NULL;
}
}
void operator delete(void *pm){
printf("myGlobal-operator-delete!\n");
if((char*)pm>=MemArr&&(char*)pm<MemArr+MAX_SIZE)//介于之间
pMem=(char*)pm;
}
void main(){
char *pc=(char*)new char[MAX_SIZE];
strcpy(pc,"abcde98765");
printf("pc=>%s\n",pc);
char *pc2 = (char *)new char[5];
delete pc;
int *pi=(int *)new int(560);
printf("(*pi)=%d\n",*pi);
double *pdA1 = (double *)new double[25];
delete []pdA1;
double *pdA2 = (double *)new double[3750];
if(!pdA2){
delete pi; exit(0);
}
delete []pdA2;
delete pi;
}

程序重载了全局的new和delete运算符,但与其他不同的是,本程序并不使用系统预装定义函数malloc和free来参与具体的动态内存分配与释放,而是由程序自己在重载的new 和delete函数体中来控制管理属于自己的一大块所谓的“动态存储空间(如程序中的字符数组空间MemArr)。即是说,重载的new函数要负责在自己的动态存储空间中进行分配,而重载的delete函数则要负责回收所释放的空间(仍由自己掌握,而后可以再一次被分配使用等)。由于重载了全局运算符new 和delete ,所以本程序中使用printf代替cout进行屏幕输出。



输出strcpy()函数有问题,需要解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: