C++动态内存:(二)重载new和delete
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、重载的原因 用new创建动态对象时会发生两件事:(1)使用operatoe new()为对象分配内存(经常是调用malloc)(2)调用构造函数来初始化内存。相对应的调用delete运算符会(1)首先调用析构函数(2)调用operator delete()释放内存(经常是调用free)。我们无法控制构造函数和析构函数的调用,是由编译器调用的。但可以改变内存分配函数operator new()和operator delete()。链接:C++中的new/new[],delete/delete[] 使用了new和delete的内存分配系统是为了通用目的而设计的,但是在特殊的情形下并不能满足需要。最常见的改变分配系统的原因常常是出于效率考虑: (1)增加分配和归还的速度。创建和销毁一个特定的类的非常多的对象,以至于这个运算成了速度的瓶颈。 (2)堆碎片。分配不同大小的内存会在堆上产生很多碎片,以至于虽然内存可能还有,但由于都是碎片,找不到足够大的内存块来满足需要。通过为特定的类创建自己的内存分配器,可以确保这种情况不会发生。例如在嵌入式和实时系统里,程序可能必须在有限资源情况下运行很长时间,这样的系统就要求内存花费相同的时间且不允许出现堆内存耗尽或者出现很多碎片。 (3)检测运用上的错误。例如:new所得的内存