new与delete的重载

来源:互联网 发布:好看的手写字体知乎 编辑:程序博客网 时间:2024/05/20 06:50

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 intvoid *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; //没懂打印出为啥是24cout << "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;}


原创粉丝点击