删除指针,但不为空

Delete pointer but does not NULL

本文关键字:指针 删除      更新时间:2023-10-16

例如,我有一个类Inventory,和一个类Item

class CInventory:
   CItem* m_pItem; // Member Variable
CInventory(CItem* pItem)
   :m_pItem(pItem)
{}
// Function
if(NULL == m_pItem)
   return;

在继续中,项目消失了,所以我删除了该项目。

template<class T>
static inline void safe_delete(T& rData)
{
if(rData)
    {
    delete rData;
    rData = NULL;
    }
 }

但是,在 CInventory if(NULL == pItem) 中的函数不起作用。我发现它们都有相同的指针。

我的代码有什么问题?

您的safe_delete似乎完成了删除给定指针的分配内存的工作(并将其设置为 null(,但这不会使指向同一内存的任何其他指针无效(无论如何现在都是垃圾(。

int main()
    {
    int* pA = new int(); // let's say pA = 0x4420ffbe
    int* pB = pA; // pB = pA = 0x4420ffbe
    // equivalent to safe_delete
    delete pA;
    pA = nullptr; // pA = 0x00000000
    // pB still points to 0x4420ffbe

    return 0;
    }

你想要的是沿着unique_ptrshared_ptrweak_ptr