c++中的COM对象管理

COM object management in C++

本文关键字:管理 对象 COM 中的 c++      更新时间:2023-10-16

假设您创建了一个COM对象,表示Windows系统中所有的DVD驱动器。您从中检索所有必要的信息并将其显示给用户。如果在某个地方有"刷新"按钮(如果将一些驱动器添加到系统中),那么管理COM对象的正确策略是什么?

1)创建管理DVD驱动器信息的类。当DVD信息窗口被创建(带有"刷新"按钮)时,创建这个类的实例,并在窗口被销毁时销毁它。COM对象在构造函数中创建,直到类实例被销毁为止。

2)创建创建COM对象的函数(可能是更一般的类的方法),检索所有信息并销毁它。当创建DVD信息窗口时,当用户点击"刷新"按钮时,它被调用。

底线是你是否应该保留COM对象,如果它被频繁使用或"以防万一"?保持COM对象存活或每次创建和销毁它,哪个代价高?如果答案是相当确定的,是不是所有的Windows对象都是这样?如果不是,如何知道在哪种情况下哪种策略更合适?谢谢。

没有这样的规则。

这不是很正确,但是c++中的COM对象只是一个类的实例。这个对象有不同的创建方式。在COM的情况下,它具有更大的可扩展性。但是在CLSCTX_INPROC_SERVER的情况下,如果我们与c++中使用new创建对象进行比较,则创建对象的成本并不高。所以,我认为你的问题的答案与问题的答案是一样的:如果我不知道一些类的构造函数会运行多长时间,我可以频繁地创建这样一个类的实例吗?

但是,再一次,如果你认为调用CoGetClassObject() (CoCreateInstance())对你来说太昂贵了,那么尝试尽可能长时间保存对新创建对象的引用