new 重载用于内存泄漏检测

#include <stdio.h>
#include <iostream>
#include <vector>
#include <numeric>
#include<algorithm>
#include <stack>
#include <string>
#include <map>

using namespace std;

class A
{
public:
    int a = 1;
};


map<void*, pair<char*, int> > my_map;

void * operator new(std::size_t size, const char *file, int line)
{
    void* p = malloc(size);
    pair<char*, int> tmp_2(const_cast<char *>(file), line);
    pair<void*, pair<char*, int> > tmp(p, tmp_2);
    my_map.insert(tmp);
    printf("operator new : address = [%x], size = [%d], file = [%s], line = [%d]\n", p, size, file, line);
    cout << "new" << endl;
    return p;
};
void * operator new[](std::size_t size, const char *file, int line)
{
    void* p = malloc(size);
    pair<char*, int> tmp_2(const_cast<char *>(file), line);
    pair<void*, pair<char*, int> > tmp(p, tmp_2);
    my_map.insert(tmp);
    printf("operator new : address = [%x], size = [%d], file = [%s], line = [%d]\n", p, size, file, line);
    cout << "new[]" << endl;
    return p;
};

void  operator delete(void *p)
{
    if(my_map.erase(p))
        cout << "delete" << endl;
	printf("delete address:%x\n", p);
    free(p);
};
void  operator delete[](void *p)
{
    if(my_map.erase(p))
        cout << "delete []" << endl;
	printf("delete address:%x\n", p);
    free(p);
};
#define new new(__FILE__,__LINE__)


int main()
{
    void *tmp_1 = new A;
    void *tmp_2 = new A[5];
    int *arr = new int[20];
   delete []arr;

    delete tmp_1;
    delete[] tmp_2;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值