我有一个这样的简单问题!在其他指针中删除对象后指针是否为NULL
class1 *a = new class1();
class1 *b = a;
delete a;
a= NULL;
现在我想检查b是否为NULL(或删除)也是,但b总是指向先前的点。 这是有问题的,当我想使用B,但一个已经删除之前!
if (b){
//do something here
}
感谢您的阅读!
我有一个这样的简单问题!在其他指针中删除对象后指针是否为NULL
class1 *a = new class1();
class1 *b = a;
delete a;
a= NULL;
现在我想检查b是否为NULL(或删除)也是,但b总是指向先前的点。 这是有问题的,当我想使用B,但一个已经删除之前!
if (b){
//do something here
}
感谢您的阅读!
正如一些人所建议的那样,使用共享指针会使这更容易。
如果你想这样做的原始方式,这里是当你说class1 *b=a
你正在服用的指针值的副本为什么*b
仍指向的a
原始值。所以不管你对a
本身做什么,b
都会挂在这个原始值上。
如果你想将其与一起改变,你将需要分配一个参考a
,或指向a
指针
class1 **b = &a;
所以,现在觉得当你提领b
发生了什么,是什么价值是指向?
它会指向您的原始class1 *
。所以,一旦你设置a=NULL
,你现在有一个指针b
指向的a
值,或NULL
我认为这比共享指针更好,因为它保留了原始代码的流向。共享指针会改变对象的生命周期以与原始代码不匹配。 – 2013-05-09 18:42:06
这是真的,尽管它需要比共享指针需要更多的内存管理。 – 75inchpianist 2013-05-09 18:45:19
是的,我认为这种方法工作得很好,但它会使代码看起来更多Pointer-Way,a已经是指针,现在b是指针^^的指针。从来没有尝试过,但我想我会尝试在某些情况下使用它!谢谢! – greenpig83 2013-11-29 04:21:40
没有办法让b
自动更新a
已经NULL
d。问题代码还说明了为什么在它的对象已被delete
设置为NULL
的指针时,d最多只能是部分指针,而非指针不能保证指针指向有效对象。
使用std::shared_ptr<class1>
而是因为有共同指向的所有权对象:
std::shared_ptr<class1> a = std::make_shared<class1>();
std::shared_ptr<class1> b = a;
动态分配的对象将与两个a
遭到破坏和b
走出去的范围。
有关可用智能指针的概述,请参阅What C++ Smart Pointer Implementations are available?。
所以这是真的,我们必须在这种情况下使用智能指针!裸指针没有其他解决方案! – greenpig83 2013-05-09 18:37:17
@ greenpig83是的,这是事实。这可能是为什么创建智能指针。 – taocp 2013-05-09 18:39:01
你根本不需要使用智能指针。见下面的解决方案有些情况下要求易用智能指针。 – 75inchpianist 2013-05-09 18:42:22
http://stackoverflow.com/questions/106508/what-is-a-smart-pointer-and-当我应该使用一个 – stardust 2013-05-09 18:34:51