局部对象&&静态对象生命周期 || new 创建的对象的生命周期

局部对象&&静态对象生命周期 || new 创建的对象的生命周期


  • 局部对象&&静态对象生命周期

非静态局部对象特点:

在定义它的函数中可以使用,函数外不可访问

存储位置在栈区

当函数的控制路径经过变量定义语句时创建该对象,当到达定义所在块的末尾时销毁它


static局部对象特点:

函数内的static对象

存储位置在全局数据区

定义它的函数中可以访问,函数外不可访问

在程序执行路径第一次经过对象定义语句时初始化(就是说多次调用它所在函数,只有第一次经过这个static对象初始化语句时才初始化它,其它时候忽略)

不会随着函数结束而消失,整个程序结束才消失

static全局对象特点:

定义在全局,或namespace范围内,或一个class中,或一个文件作用域中

存储位置在全局数据区

只有该源文件能访问,其他cpp文件不能访问

整个程序结束时消失。


小结:

定义位置 
           局部对象,static局部对象定义在函数内,static全局对象定义在函数外
          存储位置 
          局部对象存储在栈区,static局部对象和static全局对象存储在全局数据区
          访问作用域 
          局部对象和static局部对象只能在函数内被访问;static全局对象能在全局被访问
          销毁时间 
          局部对象在函数末尾销毁,static局部对象和static全局对象在程序结束时销毁
.

局部对象&&静态对象生命周期 || new 创建的对象的生命周期

 


  • new 创建的对象的生命周期

c++中的new和c中的malloc类似,如果你不delete掉这段申请的内存的话,它会一直存在直到进程结束后系统会回收掉这段资源;而如果你delete掉这段申请的内存,则这段申请到的内存的生命周期为从你new(申请一段内存)到你delete(释放掉这段内存)这段时间。