自动存储、静态存储和动态存储
根据用于分配内 的方法,C++有3种管理数据内 的方式:自动存储、静态存储和动态存储(有时也叫作自由存储空间或堆)。在 在时间的长短方面,以这3种方式分配的数据对象各不相同。
栈、堆和内存泄漏
如果使用new运算符在自由储空间(或堆)上创建变量后,没有调用delete,将发生什么情况呢?如果没有调用delete,則即使包含指针的
储空间上动态分配的变量或结构也将继续存在。实际上,将会无法访问自由储空间中的结构,因为指向这些内 的指针无效。这将导致内存泄漏。被泄漏的内存将在程序的整个生命周期内都不可使用;这些内存被分配出去,但无法收回。极端情况(不过不常见)是,内存泄漏可能会非常严重,以致于应用程序可用的内存被耗尽,出现内存耗尽错误,导致程序崩溃。另外,这种泄漏还会给一些操作系统或在相同的内存空间中运行的应用程序带来负面影响,导致它们崩溃。
float *f = new float(10.0f); //分配内存,初始值10
float *f2 = new float[10]; //分配内存,十个float数组
float *f3 = new float; //分配内存
delete f;
delete [] f2;
delete f3;