The following classes implement IUnknown and related methods:
CComObjectRootEx Manages reference counting for both aggregated and nonaggregated objects. Allows you to specify a threading model.
CComObjectRoot Manages reference counting for both aggregated and nonaggregated objects. Uses the default threading model of the server.
CComAggObject Implements IUnknown for an aggregated object.
CComObject Implements IUnknown for a nonaggregated object.
CComPolyObject Implements IUnknown for aggregated and nonaggregated objects. Using CComPolyObject avoids having both CComAggObject and CComObject in your module. A single CComPolyObject object handles both aggregated and nonaggregated cases.
CComObjectNoLock Implements IUnknown for a nonaggregated object, without modifying the module lock count.