I posted a question recently:
Initialization of Static Class members.
Now please check this code:
#include<iostream>
class A
{
static int obj_s;
public:
A()
{
obj_s++;
std::cout << A::obj_s << "\nObject(s) Created\n";
}
};
int A::obj_s = 0;
int main()
{
}
Even though one has not created any object of Class A, making the member obj_s hold a value 0 – wouldn’t it need memory since its getting defined?
Obviously, it takes memory. And
int A::obj_s=0is exactly what it does: it defines the variable along with it’s memory. In fact, when we say we defined a variableX, that means we define a memory ofsizeof(X), and that memory region we label asX.More about static members:
A::obj_sis a static member of the classA. And static members exist without any instance. They’re not part of instances ofA.§9.4.2/3 and 7 from the Standard,
Read my complete answer here:
Do static members of a class occupy memory if no object of that class is created?