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'へのすべてのポインタを変更することを期待していますか?それは渡すポインタを変更するだけです。 (そしてnullポインタを 'delete 'することは安全です;あなたはそのチェックを取り除くことができます) – molbdnilo
その関数の名前を' safe_delete'から 'sort_of_safe_delete'に変更することを検討してください。 'CInventory * p1 =新しいCInventory; Cインベントリ* p2 = p1; safe_delete(p1); '' p2'は解放されたメモリを指すようになりました。ぶら下がっているポインタへの解決策は、低レベルのハックではなく**デザイン**です。 –