使用智能指针时,我对C ++中指针指针的行为感到困惑。
在下面的可编译代码示例中,您可以看到重新分配原始指针for(double e: array){
if(array[i] < minimum){
minimum = array[i];
}
i++;
}
会影响指针pA
的指针,但使用ppA
时则不然。这似乎是非常反直觉的行为。
std::shared_ptr
答案 0 :(得分:0)
shared_ptr<shared_ptr>
与指针指针不同。 ppAsmart
保留shared_ptr
返回的原始make_shared()
。你没有做任何事情让ppAsmart
指向其他任何东西,所以它仍然持有一个仍然指向原始shared_ptr<int>
对象的pA
,其值为1.创建{后{1}},然后您重新分配ppAsmart
以指向原始pA
对象,其值为2,而pB
仍然指向ppA
变量,因此取消引用pA
可以获取值为2的原始ppA
对象。但pB
仍然指向值为1的原始ppAsmart
对象。它不指向pA
变量本身就像pA
一样。
答案 1 :(得分:0)
ppAsmart
指向指向pA
对象的新对象;特别是它没有指向pA
。它保持不变。尝试用指针和尖的对象描绘一个图表,你会看到。
shared_ptr< shared_ptr<int> > ppAsmart = make_shared< shared_ptr<int> >(pA);