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'現在指向釋放內存。懸空指針的解決方案是**設計**,而不是低級別的黑客。 –