【问题标题】:COM object management in C++C++ 中的 COM 对象管理
【发布时间】:2014-07-28 22:19:33
【问题描述】:

假设您创建了代表 Windows 系统中所有 DVD 驱动器的 COM 对象。您从中检索了所有必要的信息并将其展示给用户。如果某处有“刷新”按钮(以防某些驱动器被添加到系统中)管理 COM 对象的正确策略是什么?

1) 创建管理 DVD 驱动器信息的类。您在创建 DVD 信息窗口(使用“刷新”按钮)时创建此类的实例,并在窗口被销毁时将其销毁。 COM 对象在构造函数中创建并一直存在,直到类实例被销毁。

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

最重要的是,如果 COM 对象经常使用或“以防万一”,您是否应该保留它?什么是昂贵的,保持 COM 对象活着或每次都创建和销毁它?如果答案非常确定,那么所有 Windows 对象都是如此吗?如果不是,如何知道在哪种情况下哪种策略更合适?谢谢。

【问题讨论】:

    标签: c++ windows com


    【解决方案1】:

    这没有规则。

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

    但是,同样,如果您认为对 CoGetClassObject() (CoCreateInstance()) 的调用对您来说过于昂贵,那么请尝试尽可能长时间地保存对新创建对象的引用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      相关资源
      最近更新 更多