我想问一个简单的问题,我有一个Direct2D工厂,当我准备进行清理时,我会打电话给delete还是使用release成员?我看到一些教程明确地只是调用delete,所以我很好奇哪个更安全,除非所有的release成员所做的就是在后台调用delete等。

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数据成员使用智能指针包装,则无需在Release析构函数中显式调用Graphics:C++编译器将自动在每个数据成员上调用析构函数,这将导致Release被包装的COM接口(interface)调用。

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

10-13 08:33