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

Tre*_*ery 2 c++ windows com

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

Graphics::~Graphics() {

    if (Factory) //Factory->Release(); or  delete Factory;
    if (Render) //Render->Release();  or delete Render;
}
Run Code Online (Sandbox Code Playgroud)

Mr.*_*C64 5

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

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

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

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