re: COM 类工厂有必要存在吗? 天空之城 2016-10-11 13:28
1. ATL框架实现了一个CComClassFactory工厂类,所有自定义COM对象都是由该工厂类创建出来的。
2. CComClassFactory类的创建由DllGetClassObject->_AtlModule::DllGetClassObject创建出来
--------------------------------
为什么COM要通过两步构造的方式来创建对象,因为通过clsid创建对象只能通过查表的方式。作如下假设:
1. COM组件导出100个对象类型;
2. 游戏中要同时创建10000个某类对象;
如果每次创建对象,都是查表然后创建,那么效率非常低下。如果有了类厂,那么只需要首先取得类厂,对象的创建只是调用类厂方法10000次而已,不需要进行clsid查表了。
但是,两步创建法毕竟很繁琐,所以微软给了你一个CoCreateInstance把两步封装为一步了。这样的好处是,即提供了一步创建的接口(效率低),又提供了两步创建的接口(效率高)