如果我有一个C++类X,它实现COM接口(interface)IY和IZ,并且我有一个指向类型X的对象的IY接口(interface)的指针y,则可以这样做:IZ *z = dynamic_cast<IZ *> ( y );那不会增加对象的引用计数,对吗?我不必做Release()来解决它,对不对?如果有关系,我正在使用ATL / COM。我猜答案是“不,它不会增加引用计数,而且您也不必Release()”,但是我想确定一下。提前致谢。 最佳答案 当有人调用IUnknown::AddRef()时,COM对象的引用计数将增加。 QueryInterface()根据COM规则,因为它给出了新的接口(interface)指针,所以在内部调用AddRef()。在您发布的代码中,您没有调用AddRef(),也没有调用任何可能调用AddRef()的函数,那么为什么您会认为引用计数会增加?尽管ATL / MFC对人的大脑起到了作用,但并没有涉及任何魔术。如有疑问,您始终可以在VS中查看反汇编并逐步执行,并向自己证明未调用AddRef()。编辑:我想重申Dewfy所说的,不要这样做。使用QueryInterface()。或CComQIPtr (如果确实需要)。进一步的编辑:如果您使用CComPtr 和CComQIPtr ,则不必调用Release(),从而减轻了计算正确的引用计数的负担。您应该真正考虑使用它们。关于interface - 将COM对象的dynamic_cast传递到COM接口(interface)不会增加引用计数,对吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1460795/
10-09 21:45