检查指针在其他指针中删除对象后是否为 NULL
Check if a pointer is NULL after it's object is deleted in other pointer
我有这样一个简单的问题!
class1 *a = new class1();
class1 *b = a;
delete a;
a= NULL;
现在我想检查b是否为NULL(或被删除),但b总是指向以前的点。这是有问题的,当我想使用b,但a已经删除之前!
if (b){
//do something here
}
感谢阅读!
正如一些人建议的那样,使用共享指针将使这更容易。
如果你想用原始的方式来做,这就是为什么*b
仍然指向a
的原始值
当你说class1 *b=a
时,你正在取a的指针值的副本。所以不管你对a
本身做了什么,b
都坚持这个原始值。
如果你想让它和a一起改变,你需要给a
分配一个引用,或者给a
分配一个指针
class1 **b = &a;
现在,想想当你对b
解引用时会发生什么,它指向的是什么值?
它将指向您的原始class1 *
。所以,一旦你设置了a=NULL
,你现在有一个指针b
指向a
的值,或者NULL
没有办法让b
在a
已经成为NULL
d之后自动更新。问题码还说明了为什么在NULL
的对象已经成为delete
d之后设置指针是部分的,最好的情况下,非NULL
指针不能保证指针指向有效的对象。
使用std::shared_ptr<class1>
代替,因为存在指向对象的共享所有权:
std::shared_ptr<class1> a = std::make_shared<class1>();
std::shared_ptr<class1> b = a;
动态分配的对象将在a
和b
都超出作用域时被析构。
参见哪些c++智能指针实现是可用的?查看可用智能指针的概述。
相关文章:
- 新分配指向函数的指针是否合法?
- 在函数结束后使用指向变量的指针是否安全?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 传递给放置 new 的指针是否是指向其对象表示形式的非 UB 指针?
- 'this'指针是否可以在 c++ 标头声明中使用?
- C++ 在向量中使用指针是否可能导致指针悬空?
- 唯一指针是否在堆或堆栈上分配内存?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 当向量增长时,指向向量元素的C++指针是否无效
- 如何判断指针是否是指向数组的指针
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 如何知道指针是否已在其他地方释放
- 结构成员指针是否自动初始化为零?
- 为静态类创建指向对象的指针是否合法?
- 新的自动关键字指针是否会自行删除?
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 检查指针是否指向矢量元素
- 如何创建一个带锁的指针数组并检查指针是否空闲?
- 在映射中插入更多元素后,指向 QMap 中元素的指针是否仍然有效?