很多时候,我们使用new/delete来分配和释放内存。那么这篇问题主要讲的是,使用new来处理实际编程中可能出现的内存泄漏的问题。奇怪,既然你说delete可以释放内存呢,只要用好这两个函数,保证匹配不就得了。然后这是一种很被动的做法,当内存泄露了,问题显现出来知道时,事态可能已经很严重了。
那么我们该如何处理呢?
主要思路是重载new和delete。
先提供一个如何重载全局new和delete的简单例子。
//Overload global new/delete
#include <cstdio>
#include <cstdlib>
using namespace std;
void * operator new(size_t sz)
{
printf("operator new:%d Bytes\n",sz);
void* m = malloc(sz);
if(!m)
puts("out of memory");
return m;
}
void operator delete(void *m)
{
puts("operator delete");
free(m);
}
class S{
int i[100];
public:
S() {
puts("S::S()");}
~S() {
puts("S::~S()");}
};
int main()
{