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把兩步封裝為一步了。這樣的好處是,即提供了一步創建的接口(效率低),又提供了兩步創建的接口(效率高)