我想问一个简单的问题,我有一个 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
方法。
例如,如果您在示例中为 Factory
和 Render
数据成员使用智能指针包装器,则无需显式调用 Release
在 Graphics
析构函数中:C++ 编译器将自动调用每个数据成员的析构函数,这将导致为包装的对象调用 Release
COM 接口(interface)。
关于c++ - Windows COM C++ - 使用删除或释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840259/