在C ++中使用shared_ptr指向指针的意外行为

时间:2015-12-01 02:01:24

标签: c++ pointers smart-pointers

使用智能指针时,我对C ++中指针指针的行为感到困惑。

在下面的可编译代码示例中,您可以看到重新分配原始指针for(double e: array){ if(array[i] < minimum){ minimum = array[i]; } i++; } 会影响指针pA的指针,但使用ppA时则不然。这似乎是非常反直觉的行为。

std::shared_ptr

2 个答案:

答案 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);