有人可以清楚地解释CComPtr 之间.Release()
和
之间的区别
->Release()吗?
准确地说,在任何一种情况下如何发生内存管理?
该operator->函数CComPtr产生一个指向被管理对象的原始接口指针.(但见下文)
因此,调用->Release()将释放对象(即减少其内部引用计数).
该.Release()函数将调用->Release(),并让智能指针停止管理原始接口指针.
后者通常是你想要做的.如果你调用->Release()那么智能指针不知道这一点,并且当智能指针的析构函数运行时,它将->Release()再次调用哪个是坏的(双重释放).
根据该网页,最近的ATL的版本确实有operator->返回其中隐藏代理类AddRef和Release,因此如果您尝试应该得到一个编译错误->Release(),而不是让一个双删除.
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |