为什么类的静态成员变量要在类外初始化

1. 在类中,一般只是声明静态成员变量,但是并没有定义。

2. 声明只是表明了静态成员变量的数据类型和属性,但是并不分配内存;
3. 普通成员是“对象(实例)级别”的。而静态成员是“类级别”的,它和类的地位等同,属于类级别的成员,因此它应该先于该类任何对象的存在而存在,应该被该类的所有对象所共享。
4. 现在,假定要实例化该类的一个对象,如果之前没有定义过类的静态成员变量,那么这个时候静态成员变量这个时候肯定要定义,那么会发生什么样的事情?这时候才去定义那个静态成员吗?显然是不合适的。

因为,如果有另外一个线程也要创建该类的对象,那么按照这个方式去定义那个静态成员,会产生两种可能的情况:

1. 重复定义;

2. 就算不产生重复定义的情况,也会产生竞争,甚至死锁,以至于对象无法创建。

显然,编译器不能这么干。那么很合理的解决办法,就是事先在类的外部把它定义好,然后再供所有的对象共享。不过注意,类的静态常量成员可以类内初始化。

转载于:https://my.oschina.net/ajian2014/blog/271525

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值