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

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存