为什么静态数据成员不是c ++中对象的一部分?

时间:2015-04-05 19:04:51

标签: c++

我知道静态成员不属于对象。 但为什么会这样呢?

何时分配静态数据成员的内存?

1 个答案:

答案 0 :(得分:2)

  

我知道静态成员不属于对象。但为什么会这样呢?

因为只要您拥有所有对象的数量,就会使用static成员 “分享”,例如,类Foo具有的实例数。这样的“共享”成员不能属于特定实例。当创建新的Foo对象时,静态变量num_instances会递增。如果变量不是静态的,那么每个新的Foo都将以干净状态开始,并且不可能知道其他Foo。例如:

#include <iostream>

class Foo
{
    static int num_instances; // all instances share this variable
public:    
    Foo()
    {
        ++num_instances; // increment the number of instances
    }
    static int get_num()
    {
        return num_instances;
    }
};

int Foo::num_instances = 0;

int main()
{
    Foo foo1, foo2;
    std::cout << "We have " << Foo::get_num() << " Foo's" << std::endl;
}
  

何时分配静态数据成员的内存?

在程序启动之前分配静态对象的内存。