0
例如,我有一个类Inventory
,和一个类Item
。删除指针但不为NULL
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)
不起作用。 我发现他们都有相同的指针。
我的代码有什么问题?
您发布的代码似乎不完整的线条。请通过[最小,完整且可验证的示例]进行更新(https://stackoverflow.com/help/mcve)。 –
您是否期待该函数修改每个指向特定“CItem”的指针?它只会修改你传递给它的指针。 (并且删除一个空指针是安全的,你可以删除这个检查。) – molbdnilo
考虑把那个函数的名字从'safe_delete'改成'sort_of_safe_delete'。 'CInventory * p1 = new CInventory; CInventory * p2 = p1; safe_delete(p1);''p2'现在指向释放内存。悬空指针的解决方案是**设计**,而不是低级别的黑客。 –