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

Bra*_*d R 0 c++ com atl

有人可以清楚地解释CComPtr 之间.Release() 和 之间的区别 ->Release()吗?

准确地说,在任何一种情况下如何发生内存管理?

M.M*_*M.M 5

operator->函数CComPtr产生一个指向被管理对象的原始接口指针.(但见下文)

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

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

后者通常是你想要做的.如果你调用->Release()那么智能指针不知道这一点,并且当智能指针的析构函数运行时,它将->Release()再次调用哪个是坏的(双重释放).

根据该网页,最近的ATL的版本确实有operator->返回其中隐藏代理类AddRefRelease,因此如果您尝试应该得到一个编译错误->Release(),而不是让一个双删除.