Cpp--重载全局的new和delete

#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进行屏幕输出。

Cpp--重载全局的new和delete_第1张图片

输出strcpy()函数有问题,需要解决。

你可能感兴趣的:(Cpp--重载全局的new和delete)