c++ - Windows COM C++ - 使用删除或释放

标签 c++ windows com

我想问一个简单的问题,我有一个 Direct2D 工厂,当我准备清理时,我会调用删除还是使用发布成员?我看到一些教程只是显式调用删除,所以我很好奇哪个更安全,除非发布成员所做的所有操作都是在后台调用删除等。`

Graphics::~Graphics() {

    if (Factory) //Factory->Release(); or  delete Factory;
    if (Render) //Render->Release();  or delete Render;
}

最佳答案

释放 COM 接口(interface)的正确方法是调用接口(interface)指针上的 Release 方法。

delete 适用于在堆上使用 new 分配的 C++ 对象,不适用于 COM 接口(interface)指针。

请注意,您还可以使用 ATL 的 CComPtr 等智能指针类安全地包装原始 COM 接口(interface)指针。在这种情况下,当智能指针超出范围时,自动调用Release方法。

例如,如果您在示例中为 FactoryRender 数据成员使用智能指针包装器,则无需显式调用 ReleaseGraphics 析构函数中:C++ 编译器将自动调用每个数据成员的析构函数,这将导致为包装的对象调用 Release COM 接口(interface)。

关于c++ - Windows COM C++ - 使用删除或释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840259/

相关文章:

c++ - 在 C++ 中发送 HTML 格式电子邮件的简便方法

用于 git 的 Windows 图形用户界面

java BufferedReader 适用于 windows 而不是 mac

c++ - 如何有条件地选择我在 C++ DLL 中通过 COM 调用的 C# 类?

c# - XSD 模式到 COM 接口(interface)

c++ - 函数签名末尾的 && 是什么意思(在右括号之后)?

c++ - 这是将抽象类与 OO 方法一起使用的正确方法吗?

c++ - DOMElement 没有名为'getFirstElementChild xercesc C++ 的成员

windows - 在 Jenkins 中执行 Windows 批处理命令一直失败并显示 Exit-1 状态

python - 通过 com 从 Python 调用 Excel 宏/Excel 求解器