objectcounter.hpp

The following code example is taken from the book
C++ Templates - The Complete Guide, 2nd Edition
by David Vandevoorde, Nicolai M. Josuttis, and Douglas Gregor,
Addison-Wesley, 2017
© Copyright David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor 2017


#include <cstddef>

template<typename CountedType>
class ObjectCounter {
  private:
    inline static std::size_t count = 0;    // number of existing objects

  protected:
    // default constructor
    ObjectCounter() { 
        ++count;
    }

    // copy constructor
    ObjectCounter (ObjectCounter<CountedType> const&) {
        ++count; 
    }

    // move constructor
    ObjectCounter (ObjectCounter<CountedType> &&) {
        ++count; 
    }

    // destructor
    ~ObjectCounter() { 
        --count;
    }

  public:
    // return number of existing objects:
    static std::size_t live() { 
        return count; 
    }
};