//base.h
#ifndef BASE_H
#define BASE_H
#include<cstddef>
extern void* operator new(const size_t size,const char *file,const size_t line);
extern void operator delete(void *pv);
//base.cpp
#include "base.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void* operator new(const size_t size,const char *file,const size_t line)
{
std::cout << "new:" << std::endl;
return malloc(size);
}
void operator delete(void *pv)
{
std::cout << "delete:" << std::endl;
free (pv);
}
//main.cpp
#include "base.h"
int main()
{
int *pt = new int;
delete pt;
return 0;
}
//上面的代码编译报错,说delete重定义了,我把那个#include 去掉(主要是包含了new.h),程序编译通过,而且,程序运行也是调用的重载函数,这时为何?后面,我把他们合并到main.cpp 中,发现一切又是正常的(包含iostream.h),