Windows COM C ++ - 使用删除或发布

时间:2017-01-24 22:39:41

标签: c++ windows com

快速问题我想问一下,我有一个Direct2D工厂,当我准备清理时,我会调用删除或使用发布会员吗?我看到一些教程只是明确地调用delete,所以我很好奇哪个更安全,除非所有发布成员都在后台调用delete等。

Graphics::~Graphics() {

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

当然是Release();,只有这个在接口方法上。并且您只能为您之前由自己delete分配的内存调用new。对于从外部delete分配的内存,始终会出现错误调用DLL,因为他们的新/删除内容与您的新/删除不匹配