Release()"之间的区别?-6ren"> Release()"之间的区别?-谁能解释清楚两者之间的区别是什么.Release()和->Release() 在 CComPtr 上? 确切地说,两种情况下内存管理是如何发生的? 最佳答案 CComPtr 的operator-> 函-6ren">
gpt4 book ai didi

c++ - CComPtr 的 ".Release()"和 "->Release()"之间的区别?

转载 作者:太空宇宙 更新时间:2023-11-04 16:08:10 30 4
gpt4 key购买 nike

谁能解释清楚两者之间的区别是什么.Release()->Release() 在 CComPtr 上?

确切地说,两种情况下内存管理是如何发生的?

最佳答案

CComPtroperator-> 函数生成指向被管理对象的原始接口(interface)指针。 (但见下文)

因此,调用 ->Release() 将释放对象(即减少其内部引用计数)。

.Release()函数会调用->Release()让智能指针停止管理原始接口(interface)指针。

后者通常是您想要做的。如果你调用 ->Release() 那么智能指针不知道这个,当智能指针的析构函数运行时,它会再次调用 ->Release() 这是不好(双重释放)。

根据 this page ,最新版本的 ATL 实际上有 operator-> 返回一个代理类,它隐藏了 AddRefRelease,所以如果你应该得到一个编译错误尝试 ->Release(),而不是双重删除。

关于c++ - CComPtr 的 ".Release()"和 "->Release()"之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31937680/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com