检查指针在其他指针中删除对象后是否为 NULL

Check if a pointer is NULL after it's object is deleted in other pointer

本文关键字:指针 是否 NULL 对象 删除 其他 检查      更新时间:2023-10-16

我有这样一个简单的问题!

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

没有办法让ba已经成为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;

动态分配的对象将在ab都超出作用域时被析构。

参见哪些c++智能指针实现是可用的?查看可用智能指针的概述。