Direct3D exposes functionality through COM interface pointers. Managing the reference counts on the obtained interfaces is a common problem for new Direct3D programmers. Managing the reference count on an interface becomes trivial if you use a smart pointer wrapper class, such as
boost::shared_ptr<T> and keep in mind the ownership policies established by the smart pointer class.
In addition to managing reference counts for you, smart pointers can make your code exception safe. When an exception is thrown, if an interface pointer is held within a
CComPtr declared on the stack, then its destructor will be run when the stack is unwound. The destructor for
CComPtr will call
IUnknown::Release on any interface pointer it holds, thus cleaning up any locally obtained resources as the exception unwinds the stack to the nearest exception handler.