在C++中,存储期(Storage Duration)是指变量或对象在内存中存在的时间长度。根据存储期的不同,C++中的变量可以分为以下几种类型:
-
自动存储期(Automatic Storage Duration):
-
定义 :自动存储期的变量是在函数内部定义的局部变量,不包括用
static
声明的局部变量。 -
生命周期:从定义点开始,到包含它的代码块(通常是函数)结束时结束。每次函数被调用时,都会重新创建这些变量。
-
示例 :
cppvoid func() { int a = 10; // 自动存储期的变量 }
-
-
静态存储期(Static Storage Duration):
-
定义:静态存储期的变量在程序执行期间只被初始化一次,并在整个程序运行期间都存在。
-
生命周期:从程序开始执行时开始,到程序结束时结束。
-
分类 :
- 全局变量:在函数外部定义的变量。
- 静态局部变量 :在函数内部用
static
关键字声明的变量。 - 静态成员变量 :在类中用
static
关键字声明的成员变量。
-
示例 :
cppint globalVar = 20; // 全局变量,静态存储期 void func() { static int staticLocalVar = 30; // 静态局部变量,静态存储期 } class MyClass { public: static int staticMemberVar; // 静态成员变量,静态存储期 }; int MyClass::staticMemberVar = 40;
-
-
线程存储期(Thread Storage Duration):
-
定义:C++11引入,用于线程局部存储(Thread Local Storage,TLS),即每个线程都有自己的变量副本。
-
生命周期:从线程开始执行时开始,到线程结束时结束。
-
关键字 :使用
thread_local
关键字声明。 -
示例 :
cppthread_local int threadLocalVar = 50; // 线程局部存储期的变量
-
-
动态存储期(Dynamic Storage Duration):
-
定义 :动态存储期的变量是通过动态内存分配(如使用
new
操作符)创建的,并且需要程序员显式地释放(如使用delete
操作符)。 -
生命周期 :从使用
new
分配内存时开始,到使用delete
释放内存时结束。 -
示例 :
cppvoid func() { int* dynamicVar = new int(60); // 动态存储期的变量 // 使用dynamicVar delete dynamicVar; // 释放内存 }
-
总结:
- 自动存储期:局部变量,每次函数调用时创建和销毁。
- 静态存储期:全局变量、静态局部变量和静态成员变量,程序执行期间一直存在。
- 线程存储期:每个线程有独立的变量副本,线程结束时销毁。
- 动态存储期 :通过
new
分配的内存,需要显式delete
释放。
理解不同存储期的特点和用途对于编写高效、可靠的C++程序至关重要。