### Counted Pointers

ICountedPointerTo is a templatized "smart pointer" class which mimics a C++ pointer and can be used for reference counting both IMRefCounted objects and objects that do not descend from IMRefCounted.

ICountedPointerTo automatically calls `addRef` and `removeRef` on the object to which it points. In contrast, you have to remember to call `addRef` and `removeRef` yourself whenever you create and throw away a regular C++ pointer to a reference counted object. This is a large source of potential errors. If you forget to call `removeRef`, your program will leak memory. If you forget to call `addRef`, an object might be deleted while you are using it.

When you use ICountedPointerTo for reference counting objects that do not descend from IMRefCounted, you must follow some rules that are described in the chapter Using Counted Pointers.

Reference Counted Objects

Using Counted Pointers
Using Reference Counted Objects