释放之前的临时指针?

问题描述 投票:0回答:1

[我研究了atlbase.h以了解如何实现CComPtr<>,并偶然发现了基类Release()中的CComPtrBase<>函数,该函数释放了如下所示的底层对象:

// Release the interface and set to NULL
void Release() throw()
{
    T* pTemp = p;
    if (pTemp)
    {
        p = NULL;
        pTemp->Release();
    }
}

我的知识不足以查看此临时指针pTemp的意义是什么?

为什么此代码不只是:

   void Release() throw()
   {
       if (p)
       {
           p->Release();

           // EDIT:
           p = NULL;
       }
   }

现在,如果您看一下析构函数,则析构函数的定义就像我对以上示例的期望一样,有什么区别?

c++ pointers com smart-pointers
1个回答
1
投票

这里有两种可能的解释:

© www.soinside.com 2019 - 2024. All rights reserved.