1、用户对控制存储的需要
C++语言为在自由存储区上分配和释放存储,分别提供了new和delete运算符。满足用户对于细粒度存储分配和释放的需要。
通常,需要用户自己控制存储的场景有以下几种:
(1)为某些频繁使用的类建立一个类分配器。如对某些类,大量的建立或删除小对象,典型的情况是树节点、链表节点、点、消息等类的对象。通用的存储分配机制开销较大,而且不同大小的对象混合会造成碎片的增加。
(2)对于资源紧张而且需要长时间运行而不能中断的程序。
(3)实时系统,通常要求有保证并且可预期的存储分配。
(4)某些大型而复杂的C++系统......
2、C++提供的存储管理的机制
(1)存储分配和初始化的分离
new运算符保证分离的存储分配和初始化一起使用,编译系统产生的代码,会完成存储空间的分配,然后调用构造函数进行初始化。
(2)new/delete与new []/delete []配对使用。
(3)虚析构函数,使得基类指针指向的派生类的对象能够被正确delete而释放。
(4)set_new_handler,用户自己提供函数来处理内存耗尽情况。用户可以在这个函数里,尝试寻找其他自由存储资源,也可以返回报错信息。实现内存耗尽时用户对程序的控制。
3、关于垃圾回收机制
C++的设计者认为,垃圾回收机制会带来严重的空间和事件开销,以及增加实现和移植这一机制的复杂性。因此垃圾回收有用户来自己处理。
垃圾回收带来的好处和坏处分别如下。
好处:
(1)方便易于使用。
(2)对一些应用而言,自动的垃圾回收机制比程序员提供的存储管理机制要可靠。
坏处:
(1)时间和空间的开销。
(2)垃圾回收技术常常意味着服务的中断,对于一些实时程序、设备驱动程序、较慢的硬件上运行的人机界面代码、操作系统核心等无法接受。
(3)垃圾回收方案通常有对象布局和对象创建的限制。
(4)有些垃圾回收方案需要禁止一些C机制,譬如指针、不加检查的数组访问、不加检查的参数等。
注:以上总结自《C++语言的设计和演化》一书。