new与delete的重载
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <string.h>
//new 和delete的重载
//new new[] delete delete[]
//适用于极个别情况需要定制的时候才用的到。一般很少用
//声明可以不加 参数
//void *operator new(size_t);
//void operator delete(void *);
//void *operator new[](size_t);
//void operator delete[](void *);
class A
{
public:
A()
{
cout << "A()" << endl;
}
~A()
{
cout << "~A()" << endl;
}
void func()
{
cout << "i am a function" << endl;
}
//size_t 为 unsigned int
void *operator new(size_t size) //重载之后取代全局
{
cout << "size= " << size << endl;
cout << "void *operator new(size_t)" << endl;
void* p = malloc(size);
memset(p, 0, size);
((A*)p)->data = 100; //代表可以在实现定制化的函数内初始化
//可以实现自我早期的定制 早于构造器初始化
return p;
}
void operator delete(void *p) //重载之后取代全局
{
cout << "void operator delete(void *)" << endl;
free(p);
}
void *operator new[](size_t size)
{
cout << "size= " << size << endl; //没懂打印出为啥是24
cout << "void *operator new[](size_t size)" << endl;
void* p = (void*)malloc(size);
return p;
}
void operator delete[](void * p)
{
cout << "void operator delete[](void *)" << endl;
free(p);
}
int data;
};
//定制化,我要实现A类对象的生成,用我自己定制的new delete
//而其他仍用系统的 就把要实现的函数作为类A的成员函数
int _tmain(int argc, _TCHAR* argv[])
{
A* pa = new A; //new 会调用构造器
pa->func();
cout << pa->data << endl;
delete pa; //delete 会调用析构器
//A* pm=(A*)malloc(sizeof(A)); //malloc不会调用构造器
//free(pm); //free不会调用析构器
cout << "==============================" << endl;
A* pb = new A[5];
delete[]pb;
cout << "===========================" << endl;
int *p = new int; //系统的
return 0;
}