8.5. Ensuring a Single Copy of a Member Variable
Problem
You have a member
variable that you want only one instance of, no matter how many instances of
the class are created. This kind of member variable is generally called a static member or a class variable, as
opposed to an instance variable, which is one that is instantiated
with every object of a class.
Solution
Declare the member
variable with the static keyword, then
initialize it in a separate source file (not the header file where you declared it) as in
Example 8-5.
Example 8-5. Using a static member variable
// Static.h
class OneStatic {
public:
int getCount() {return count;}
OneStatic();
protected:
static int count;
};
// Static.cpp
#include "Static.h"
int OneStatic::count = 0;
OneStatic::OneStatic() {
count++;
}
// StaticMain.cpp
#include <iostream>
#include "static.h"
using namespace std;
int main() {
OneStatic a;
OneStatic b;
OneStatic c;
cout << a.getCount() << endl;
cout << b.getCount() << endl;
cout << c.getCount() << endl;
}Discussion
static is C++’s way of allowing only one copy of
something. If you declare a member variable static,
only one of it will ever be constructed, regardless of the number of objects of that class
that are instantiated. Similarly, if you declare a variable static in a function, it is constructed at most once and retains its value from one function call to another. With member variables, you have to do a little extra work to make sure member variables are allocated properly, though. This ...