Curiously Recurring Template Pattern - Object Counter

Object Counter

The main purpose of an object counter is retrieving statistics of object creation and destruction for a given class. This can be easily solved using CRTP:

template struct counter { static int objects_created; static int objects_alive; counter { ++objects_created; ++objects_alive; } protected: ~counter // objects should never be removed through pointers of this type { --objects_alive; } }; template int counter::objects_created( 0 ); template int counter::objects_alive( 0 ); class X : counter { // ... }; class Y : counter { // ... };

Each time an object of class X is created, the constructor of counter is called, incrementing both the created and alive count. Each time an object of class X is destroyed, the alive count is decremented. It is important to note that counter and counter are two separate classes and this is why they will keep separate counts of X's and Y's. In this example of CRTP, this distinction of classes is the only use of the template parameter (T in counter) and the reason why we cannot use a simple un-templated base class.

Read more about this topic:  Curiously Recurring Template Pattern

Famous quotes containing the words object and/or counter:

    In the one instance, the dreamer ... loses sight of this object in a wilderness of deductions and suggestions ... until ... he finds the incitamentum, or first cause of his musings,... forgotten. In my case, the primary object was invariably frivolous, although assuming, through the medium of my distempered vision, a refracted and unreal importance.
    Edgar Allan Poe (1809–1849)

    I’d take the bus downtown with my mother, and the big thing was to sit at the counter and get an orange drink and a tuna sandwich on toast. I thought I was living large!... When I was at the Ritz with the publisher a few months ago, I did think, “Oh my God, I’m in the Ritz tearoom.” ... The person who was so happy to sit at the Woolworths counter is now sitting at the Ritz, listening to the harp, and wondering what tea to order.... [ellipsis in source] Am I awake?
    Connie Porter (b. 1959)