我有一个像这样的简单问题!
class1 *a = new class1();
class1 *b = a;
delete a;
a= NULL;
现在我还想检查 b 是否为 NULL(或已删除),但 b 总是指向以前的点。当我想使用b时这是有问题的,但是a之前已经删除了!
if (b){
//do something here
}
谢谢阅读!
d后无法b
自动更新。问题代码还说明了为什么在对象被d 之后设置指针至多是部分的,并且非指针不能保证指针指向有效对象。a
NULL
NULL
delete
NULL
使用 astd::shared_ptr<class1>
代替,因为指向对象的共享所有权:
std::shared_ptr<class1> a = std::make_shared<class1>();
std::shared_ptr<class1> b = a;
动态分配的对象将同时被破坏a
并b
超出范围。
请参阅有哪些可用的 C++ 智能指针实现?有关可用智能指针的概述。
正如一些人所建议的,使用共享指针会使这更容易。
如果您想以原始方式进行操作,这就是为什么*b
仍然指向原始值的原因a
当您说class1 *b=a
您正在获取 a的指针值的副本时。所以不管你对a
自己做什么,b
都要坚持这个原始价值。
如果您希望它与 a 一起更改,则需要分配对 的引用a
或指向指针的a
指针
class1 **b = &a;
所以现在,想想当你取消引用时会发生b
什么,那个指向什么值?
它将指向您原来的class1 *
. 所以,一旦你设置a=NULL
了 ,你现在就有了一个指向或 NULLb
值的指针a