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