This typedef of CComObjectRootEx is templatized on the default threading model of the server.
typedef CComObjectRootEx<CComObjectThreadModel> CComObjectRoot;
CComObjectRoot is a typedef of CComObjectRootEx templatized on the default threading model of the server. Thus CComObjectThreadModel will reference either CComSingleThreadModel or CComMultiThreadModel.
CComObjectRootEx handles object reference count management for both nonaggregated and aggregated objects. It holds the object reference count if your object is not being aggregated, and holds the pointer to the outer unknown if your object is being aggregated. For aggregated objects, CComObjectRootEx methods can be used to handle the failure of the inner object to construct, and to protect the outer object from deletion when inner interfaces are released or the inner object is deleted.