/*
VS2013:
注意时应该把 把debug 模式换成 releasr 模式下运行,否则会冲突,因为都对内存进行管理。
C++ C语言层 管理内存的区别
C语言层管理内存,管理malloc free
全局 new 局部 new ,都会调用一次构造函数
管理内存即调用局部,又调用全局管理
局部的内内存管理是管理对象的,全局的内存管理是管理基本数据类型 int double...
局部new ->全局new ->malloc ->构造函数 也可以跳过全局new //局部new -> malloc->构造函数
//构造->局部delete ->全局delete ->free
*/
#include<iostream>
#include<cstdlib> //malloc free
using namespace std;
void * mymalloc(size_t size)
{
cout << "mymalloc" << endl;
void *p = malloc(size);
return p;
}
void myfree(void *p)
{
cout << "myfree" << endl;
free(p);
}
#define malloc mymalloc
#define free myfree
//重写全局可以监视所有。
void * operator new(size_t size)
{
cout << "g_all new " << endl;
void *p = (void *)malloc(size);
return p;
//return nullptr;
}
void operator delete(void *p)
{
cout <<"g_all delete" << endl;
free(p);
}
//new 无论是局部还是全局都会调用一次构造函数。
class myclass
{
public:
myclass()
{
cout << "myclass()" << endl;
}
~myclass()
{
cout << "~myclass()" << endl;
}
/* 重写了 new delete */
void * operator new(size_t size)
{
cout << "myclass new" << endl;
//局部new ->全局new ->malloc ->构造函数
myclass *p = ::new myclass;
return p;
//局部new -> malloc->构造函数
/* void *p = malloc(size);
return p;*/
}
void operator delete(void *p)
{
cout << "myclass delete" << endl;
//构造->局部delete ->全局delete ->free
//::delete p;
//构造->局部delete ->free
free(p);
}
};
void main()
{
/*int *p1 = new int(5);
int *p2 = new int[5]{1, 2, 3, 4, 5};*/
//new delete 本质是函数,C++标准库函数。
//调用局部的
myclass *p = new myclass;
delete p;
//调用全局的。
//myclass *p = ::new myclass;
//::delete p;
cin.get();
}