c++ 重载new和delete实现内存管理
2017-07-04 11:31
651 查看
#include <iostream> #include <stdlib.h> using namespace std; //全局的new delete监视所有内存释放分配 //局部的new delete监视某个类的所有分配释放 void* operator new(size_t size) { if (size == 0) { return 0; } void* p = malloc(size); cout << "全局被调用内存被分配" << p << endl; return p; } void operator delete(void* p) { cout << "全局被调用内存被释放" << p << endl; free(p); } void* operator new[](size_t size) { return operator new(size); } void operator delete[](void* p) { return operator delete(p); } class myclass { public: static int result; int* p; int length; public: myclass() { cout << "myclass被创建" << endl; } ~myclass() { cout << "myclass被销毁" << endl; } //类的内部new没有完成分配内存的动作,只是通往全局new中间做了一个劫持 static void* operator new(size_t size) { result += 1; cout << "对象被创建" << endl; myclass *ptemp = ::new myclass;//劫持 return ptemp;//返回一个全局的指针 } static void* operator new[](size_t size) { cout << "对象数组被创建" << endl; return operator new(size); //每个对象挨个调用已经重载好的new } static void operator delete(void* p) { result -= 1; cout << "对象被销毁" << endl; ::delete p; } static void operator delete[](void* p) { cout << "对象数组被销毁" << endl; return operator delete(p); } }; int myclass::result = 0; void main() { //int* p = new int[10]; //delete[] p; myclass *p1 = new myclass[5]; delete[] p1; }
相关文章推荐
- 重载new和delete方法实现C++内存安全
- 如何实现自己特定的内存管理,如何正确替换C++中的全局运算符new和delete
- 重载new和delete方法实现C++内存安全
- c++ 中的重载全局new,delete
- C++内存管理基础之new & delete
- c++ 中的重载全局new,delete
- [C++再学习系列] 深入new/delete:Operator new的全局重载
- new、delete、指向连续空间的指针、数组、空间释放、空间申请[C++][内存管理]
- C++内存管理基础之new & delete
- C++ new/delete 重载
- C++中的内存管理(new、delete、内存泄漏)
- [转]C++中的内存管理(new、delete、内存泄漏)
- [C++再学习系列] 深入new/delete:Operator new的全局重载 -转载
- C++内存管理基础之new & delete
- c++ 中的重载全局new,delete
- C++中的内存管理——关于new和delete的讨论
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- new、delete、指向连续空间的指针、数组、空间释放、空间申请[C++][内存管理]
- 改善C++ 程序的150个建议学习之建议33:小心翼翼地重载operator new/ operator delete