根据内存分配方法,c++一共三种管理数据内存的方式

1.自动存储

在函数内部定义的常规变量使用自动存储空间,函数调用时自动产生,结束时消亡。自动变量相当于时局部变量,存储在栈区

2.静态存储

静态存储时整个程序执行期间都存在的存储方式。一、在函数外声明。二、在声明变量前使用关键字static

自动存储和静态存储关键在于:这些方法严格地限制了变量的寿命

3.动态存储

new和delete运算符提供了一种比自动变量和静态变量更灵活的方法。他们管理了一个内存池,这在c++中被称为自由存储空间/堆区。该内存池同用于静态变量和自动变量的内存是分开的。可在一个函数中创建该变量,又在另一个函数中释放该变量。

 

栈、堆、内存泄漏

如果使用new,没有delete

即使包含指针的内存由于作用域规则和对象生命周期的原因而被释放,在自由存储空间上动态分配的变量或结构依然存在。

实际上将会无法访问自由存储空间的结构,因为指向这些内存的指针无效。

这将导致内存泄露,被泄漏的内存在程序的整个生命周期将不可使用,这些内存被分配,但无法被使用