为什么我们不为不同的对象拥有不同的静态变量副本?
因为 C++ 标准 (2003) 中的 $9.4.2/1 部分说,
静态数据成员不是 类的子对象。有 静态数据成员只有一份副本 被所有对象共享 上课了。
由于标准本身决定了 C++ 是什么、不是什么,所以这就是 C++ 的设计方式!
静态成员更像是全局对象。相同的副本属于所有对象!
详细答案请参阅这篇文章:如果没有创建该类的对象,该类的静态成员是否会占用内存?
静态成员不与特定实例关联。
如果您希望每个实例的成员具有不同的值,您应该使用 instance 成员(删除 static 关键字)。
根据定义,静态对象是由类的所有实例共享的对象。普通会员没有这个属性。
这就是
static
的定义 - 存在一份数据副本。它是单独存储的,很可能与库或应用程序的所有其他静态数据一起存储。
因为这就是
static
在这种情况下的意思。
因为类静态成员单独存储在BSS部分,所以类的每个实例都有相同的值。