我想问一个简单的问题,我有一个 Direct2D 工厂,当我准备清理时,我会调用删除还是使用发布成员?我看到一些教程只是显式调用删除,所以我很好奇哪个更安全,除非发布成员所做的所有操作都是在后台调用删除等。
Graphics::~Graphics() {
if (Factory) //Factory->Release(); or delete Factory;
if (Render) //Render->Release(); or delete Render;
}
Run Code Online (Sandbox Code Playgroud)
释放COM接口的正确方法是调用Release接口指针上的方法。
delete适用于new在堆上分配的 C++ 对象,不适用于 COM 接口指针。
请注意,您还可以使用 ATL 等智能指针类安全地包装原始 COM 接口指针CComPtr。在这种情况下,当智能指针超出范围时,会自动Release调用该方法。
例如,如果您在示例中对Factory和Render数据成员使用智能指针包装器,则无需在析构函数Release中显式调用Graphics:C++ 编译器将自动调用每个数据成员的析构函数,这将导致Release为包装的成员调用析构函数。 COM 接口。