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 ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.