在 C++ 中,类的静态成员变量是一种特殊的成员变量,它在类的所有实例之间共享,并且在程序中只有一份。这种特性决定了静态成员变量的内存分配方式与普通成员变量不同。
静态成员变量内存分配的特点
-
静态成员变量的内存属于类而非对象:
- 普通成员变量是在对象被创建时分配内存,每个对象都有独立的副本。
- 静态成员变量则是在类加载时分配内存,而不是依赖于对象的创建。
-
存储于全局或静态区:
- 静态成员变量的内存是在程序的全局数据区(或静态存储区)分配的,不随着对象的创建或销毁而改变其生命周期。
- 这意味着无论创建多少个对象,静态成员变量只有一份,并且在程序结束时释放内存。
-
必须在类外定义:
- 静态成员变量在编译时分配内存,但它的实际存储(定义)需要在类外部完成。否则,编译器不会为它分配内存。
- 例如:
class MyClass { public: static int staticVar; // 声明 }; int MyClass::staticVar = 0; // 定义并初始化
-
初始化与作用域:
- 静态成员变量的初始化通常在类外进行,并且只执行一次,适用于所有对象。
- 在类外定义时,静态成员变量的初始化值可以直接写在定义中(C++11 后