起源
如果我们的程序需要频繁的new和delete,就会导致内存碎片、性能损失等问题,所以需重载new 和delete,如果我们不用new和delete,直接把数据放在栈里面,是不是就能避免这个问题呢,但栈的空间是有限的,大型程序都是把数据放在了堆里面
原理
new的工作原理
1.通过new分配内存
2.调用构造函数
3.返回内存的指针
delete工作原理
1.调用析构函数
2.通过delete释放内存
在这5个步骤里面,我们能够重载的只有new的1和delete的2,其他的都是系统已经写好的
new和delete的其他形式
char* mem=new char[0x10001];
char* x=new(mem) char[10];
new的另一种形式就是指定它所创建的地址,这里x和mem指向同一块内存,就是把第二行的new开辟的内存,然后让mem指向它,即0x10001有了10个char类型的内存空间,然后让x来接收
同样,delete也可以写成这种形式
重载
可以重载为成员函数和全局,但是全局太复杂,而且很容易出错,这里不写
void* hint::operator new(size_t size)
{
return ::operator new(size);
}
为什么返回值是void*呢,因为new一个对象后,都会返回一个指针,函数里面的::operator new 是什么意思呢?这是调用了系