删除指针,但不为空
Delete pointer but does not NULL
例如,我有一个类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)
中的函数不起作用。我发现它们都有相同的指针。
我的代码有什么问题?
您的safe_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;
}
你想要的是沿着unique_ptr
、shared_ptr
或weak_ptr
相关文章:
- 使用函数引用指向节点的指针删除链表中的节点?
- 如何通过指向元组的共享指针删除对象
- 函数内的 C++ 指针删除
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 如何通过存储在 std::list 中的指针删除对象?
- C++中的智能指针删除
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 使用 C 字符串和指针.删除除小写和空格以外的任何字符
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 提升属性树:使用指向节点及其父节点的指针删除节点
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- C++ Valgrind 双指针删除,用于防止内存泄漏
- C 通过指向其基类的指针删除派生对象
- 将指针删除到数组
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- 智能指针删除器和"using"名称为"pointer"关键字
- 通过指向其基的指针删除 POD 对象是否安全
- 模板化的出列无效指针:删除类时失败
- 使用"this"指针删除
- (C++) list.error 方法和使用指针删除内存