C++ 删除指针但不为空

C++ 删除指针但不为空,c++,C++,例如,我有一个类清单和一个类项目 在“继续”中,项目消失,因此我删除了该项目 template<class T> static inline void safe_delete(T& rData) { if(rData) { delete rData; rData = NULL; } } 但是,CInventory ifNULL==pItem中的函数不起作用。 我发现它们都有相同的指针 我的代码出了什么问题?您的safe\u delete似乎

例如,我有一个类清单和一个类项目

在“继续”中,项目消失,因此我删除了该项目

template<class T>
static inline void safe_delete(T& rData)
{
if(rData)
    {
    delete rData;
    rData = NULL;
    }
 }
但是,CInventory ifNULL==pItem中的函数不起作用。 我发现它们都有相同的指针

我的代码出了什么问题?

您的safe\u 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;
    }

你想要的是一个独特的、共享的或弱的代码,你发布的代码似乎不完整。请使用更新。您是否希望该函数修改指向特定CItem的每个指针?它只修改传递给它的指针。删除空指针是安全的;您可以移除该检查。请考虑将该函数的名称从安全性删除更改为SotTyfOfSufthyDelphi。CInventory*p1=新CInventory;CInventory*p2=p1;安全1;p2现在指向释放的内存。悬空指针的解决方案是设计,而不是低级黑客。根本不要使用new和delete!考虑使用StaskPosits。还要注意,NULL是不推荐的,请改用nullptr。我并不是说NULL是用C++标准来表示的。
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;
    }