如何理解类的静态成员变量在编译时就分配了内存

在 C++ 中,类的静态成员变量是一种特殊的成员变量,它在类的所有实例之间共享,并且在程序中只有一份。这种特性决定了静态成员变量的内存分配方式与普通成员变量不同。

静态成员变量内存分配的特点

  1. 静态成员变量的内存属于类而非对象

    • 普通成员变量是在对象被创建时分配内存,每个对象都有独立的副本。
    • 静态成员变量则是在类加载时分配内存,而不是依赖于对象的创建。
  2. 存储于全局或静态区

    • 静态成员变量的内存是在程序的全局数据区(或静态存储区)分配的,不随着对象的创建或销毁而改变其生命周期。
    • 这意味着无论创建多少个对象,静态成员变量只有一份,并且在程序结束时释放内存。
  3. 必须在类外定义

    • 静态成员变量在编译时分配内存,但它的实际存储(定义)需要在类外部完成。否则,编译器不会为它分配内存。
    • 例如:
      class MyClass {
      public:
          static int staticVar; // 声明
      };
      
      int MyClass::staticVar = 0; // 定义并初始化
      
  4. 初始化与作用域

    • 静态成员变量的初始化通常在类外进行,并且只执行一次,适用于所有对象。
    • 在类外定义时,静态成员变量的初始化值可以直接写在定义中(C++11 后
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值