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()函数有问题,需要解决。
相关文章推荐
- C++习题
- 用C语言测试Multiple-Query
- C++ 构造函数
- C++ 虚析构函数
- C/C++中经常使用的字符串处理函数和内存字符串函数
- C++ variadic
- Qt,一个跨平台的C++应用程序程序开发框架
- C++ 不能重载的运算符
- C++类中的静态成员变量和静态成员函数的作用
- 我的C语言之路3
- VC++6.0 空格错误之 unknown character '0xa1'
- C++中一个关于复制构造函数和指针的问题
- C++静态库与动态库
- C++拷贝构造函数(深拷贝,浅拷贝)
- C++,C#,JAVA之间webservice互操作问题探讨
- C++某些函数的介绍
- C语言实现哈夫曼树
- nf笔记
- 虚继承原理详解及实例分析
- C语言之头文件包含问题