删除指针但不是NULL

时间:2017-04-08 16:45:41

标签: c++

例如,我有一个班级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)中的功能不起作用。 我发现它们都有相同的指针。

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

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

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