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



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

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

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

因为只要您有一些数量,所有对象都会使用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;
}

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

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

最新更新