我知道静态成员不属于对象。但为什么会这样呢?
何时分配静态数据成员的内存?
我知道静态成员不属于对象。但为什么会这样呢?
因为只要您有一些数量,所有对象都会使用static
成员"share",例如 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;
}
何时分配静态数据成员的内存?
静态对象的内存在程序启动之前分配。