【发布时间】:2021-08-21 06:36:38
【问题描述】:
刚开始使用共享指针并尝试了这样的示例程序:
int x = 10;
shared_ptr<int> ptr = make_shared<int>(x);
*ptr = 11;
cout<< x << " " << *ptr;
结果是 10 11,这对我来说没有意义,因为 ptr 指向 x,因此 x 的值应该更改为 11。有人可以在这里解释一下吗?此外,当指向它的共享指针发生更改时,我还需要更改 x 的值。请让我知道如何实现这一目标。提前致谢。
【问题讨论】:
-
"ptr 指向 x" - 不,它不是(而且它永远不会)。它指向由
make_shared<int>分配 的对象。该对象的 值 由x通过make_shared<int>(x)的构造函数 arg 部分提供。据我所知,x在这里毫无意义。如果你想要一堆引用它的指针,简单的int *就足够了(但我已经怀疑它会解决你真正遇到的任何潜在问题)。 -
您尝试做的事情是不明智的。如果您正在尝试学习如何使用共享指针,那么这不是您使用它们的方式。如果您认为这是解决某些特定问题的正确方法,您需要向我们解释该问题是什么。共享指针的目的是管理对象的生命周期,而您的
x对象的生命周期已经由它具有范围这一事实控制。 -
最好不要将“智能指针”视为指针。
标签: c++ c++11 pointers shared-ptr