例如,我有一个班级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)
中的功能不起作用。
我发现它们都有相同的指针。
我的代码出了什么问题?
答案 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_ptr
,shared_ptr
或weak_ptr