Windows COM C++ - 使用删除或释放
Windows COM C++ - Using delete or Release
我想问的快速问题,我有一个 Direct2D 工厂,当我准备清理时,我会调用删除还是使用发布成员?我看到一些教程只是显式调用 delete,所以我很好奇哪个更安全,除非发布成员所做的只是在后台调用 delete 等。
Graphics::~Graphics() {
if (Factory) //Factory->Release(); or delete Factory;
if (Render) //Render->Release(); or delete Render;
}
释放 COM 接口的正确方法是在接口指针上调用 Release
方法。
delete
用于在堆上分配new
C++对象,而不是 COM 接口指针。
请注意,您还可以使用智能指针类(如 ATL 的 CComPtr
)安全地包装原始 COM 接口指针。在这种情况下,当智能指针超出范围时,将自动调用 Release
方法。
例如,如果对示例中的Factory
和Render
数据成员使用智能指针包装器,则无需在Graphics
析构函数中显式调用Release
:C++编译器将自动调用每个数据成员上的析构函数,这将导致为包装的 COM 接口调用Release
。
当然Release();
,而且只有这个接口方法。 并且您只能对以前由自己的new
分配的内存调用delete
。 总是错误调用从外部DLL
分配的内存delete
,因为它们 new/delete 无法匹配您的 new/delete
相关文章:
- 如何控制或优化或删除或释放 UNION 中未使用的内存
- 文件删除(使用取消链接)与释放所有磁盘空间之间的延迟
- 未找到匹配的运算符删除;如果初始化引发异常,内存将不会被释放
- C++ - 析构函数只是释放内存还是实际删除对象
- 如何通过带有指向基类的指针的删除运算符释放内存
- 为什么在 C++ 执行删除操作后仍可以访问释放的动态分配的内存
- 删除指针时,未分配被释放的 C++ 指针错误
- 删除[]是否可以与通用数组正常使用?如果是这样,为什么使用std :: vector ::擦除它会导致释放内存的错误
- 使用删除与智能指针释放内存以及释放内存的正确方法
- 删除不会在函数结束时释放内存
- 有什么方法可以通过删除表达式安全地处理两次释放内存?
- C++ 删除对象不释放内存
- C++ 在覆盖新运算符和删除运算符时不释放数据
- Windows COM C++ - 使用删除或释放
- C++应用程序:如何正确删除/释放已分配的对象
- 当我通过删除临时节点来释放内存时,我会得到读取访问违规行为.但是只有当我返回错误语句时
- 如何在列表中间释放删除的节点,而没有阀门错误
- 在JNI呼叫中使用后,应删除/释放JarrayObject(字符串阵列)
- 删除/释放性能变化
- 从字符串流中删除(释放)元素