new和delete在高级内存管理中的应用
来源:互联网 发布:对联寸步优游知远近 编辑:程序博客网 时间:2024/05/22 17:37
#include <iostream>using namespace std;//new 的本质还是malloc delete 的本质是free//delete new 最底层就是free malloc//delete new 提供了重载的机制(官方说法),通俗的理解就是劫持//delete new 全局重载,只要分配内存都劫持//内存防泄漏系统,内存反复释放,进制创建,禁止销毁//delete new 局部重载,只影响本类型,只要分配内存就劫持//内存防泄漏系统,内存反复释放,进制创建,禁止销毁int num = 0;void *operator new(size_t size)//全局重载,{num += 1;//计数if (size == 0){return nullptr;}void *p = malloc(size);cout << "全局new call" << endl;return p;}void *operator new[](size_t size)//[]数组{cout << "全局 new[] call " << endl;return operator new(size);}void operator delete(void *p)//监测内存释放的过程{num -= 1;cout << "全局delete call" << endl;free(p);}void operator delete[](void *p)//批量释放{cout << "全局 delete[] call" << endl;operator delete(p);}class myclass{public:int data;void *operator new(size_t size)//局部重载{cout << "mycalss new call" << endl;myclass *p = ::new myclass;//::使用全局的newreturn p;}void operator delete(void *p){cout << "myclass delete call" << endl;::delete p;free(p);}protected:private:};void main1(){int *p1 = new int;int *p2 = new int;int *p3 = new int;int *p4 = new int;myclass *p = new myclass;cout << num << endl;delete p1;delete p2;cout << num << endl;system("pause");//全局new call//全局new call//全局new call//全局new call//mycalss new call//全局new call//5//全局delete call//全局delete call//3}class newclass{public:newclass(){cout << "new class Create" << endl;}~newclass(){cout << "newclass Delete" << endl;}int data;void *operator new(size_t size){cout << "newclass new call" << endl;newclass *p = ::new newclass;//::使用全局的newreturn p;}void operator delete(void *p){cout << "newclass delete call" << endl;::delete p;free(p);}protected:private:};void main2(){newclass *p = new newclass;delete p;cin.get();system("pause");}//newclass new call//全局new call//new class Create//new class Create//newclass Delete//newclass delete call//全局delete callvoid main(){int *p = new int[10];//delete p;//对于基本数据类型,有无[]都没关系,但是建议写上[]delete [] p;system("pause");}//全局 new[] call//全局new call//全局delete callvoid main4(){newclass *p = new newclass;delete[]p;//delete必须加[] 必须批量释放数组,调用每一个元素析构函数 cin.get();}
0 0
- new和delete在高级内存管理中的应用
- 内存管理:new和delete
- new和delete管理内存
- C++中的new和delete在类中的应用
- 实例详解new和delete 内存管理
- C++内存管理之new和delete
- 动态管理内存之new和delete
- 内存管理 new、delete’
- [转]C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理——关于new和delete的讨论
- 内存管理中的(new、delete、malloc、free)
- 动态内存管理---new&delete
- 动态内存管理new&delete
- android开发之仿QQ拖拽界面效果(侧滑面板)
- 获取时间函数
- Eclipse中集成SVN插件
- HDU_1016
- memset使用细节
- new和delete在高级内存管理中的应用
- Linux 环境下eclipse启动出现错误:jvm terminated. exit code=13
- 纯CSS实现三角形
- 河南省第八届ACM大学生程序设计竞赛总结
- Spring-----10、深入理解依赖关系配置
- (3)Data-Part2.Operations
- 【Java总结-集合】Collections工具类
- CCEditBox实现原理
- typedef