微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使共享指针指向变量

如何解决使共享指针指向变量

刚开始使用共享指针并尝试了这样的示例程序:

int x = 10;
shared_ptr<int> ptr = make_shared<int>(x);
*ptr = 11;
cout<< x << " " << *ptr;

结果是 10 11 这对我来说没有意义,因为 ptr 指向 x,因此 x 的值应该更改为 11。有人可以在这里解释一下吗?另外,当指向它的共享指针更改时,我需要更改 x 的值。请让我知道如何实现这一目标。提前致谢。

解决方法

您误解了 std::shared_ptr 提供的内容。它是一种共享动态数据所有权的机制;不附加指向非动态数据的指针。

在您发布的代码中,这声明了一个简单的 int 变量,初始值为 10

int x = 10;

然后构造一个指向 new int 的共享指针,它与 x 的唯一关系是从后者获得的值以初始化前者。

std::shared_ptr<int> ptr = std::make_shared<int>(x);  

换句话说,对于这段代码中的所有意图,上面等价于:

std::shared_ptr<int> ptr = std::make_shared<int>(10);

如果您希望代码中的一堆指针通过地址引用 x,请先问问自己为什么,然后问问自己为什么不只是使用引用。即

int x = 10;

// somewhere else
int &ref = x;
ref = 42; // will change x

如果您真正想要的是一个共享状态,其中包含所有权引用计数和适当的处理机制,那么您可能想要:

std::shared_ptr<int> x = std::make_shared<int>(10);

// somewhere else
std::shared_ptr<int> ptr = x;

在上面的代码中,有两个动态 int的引用:共享指针x和共享指针{{ 1}}。两者都拥有该动态 ptr 的平等和共享所有权。当其中一个被销毁时,资源仍然存在,因为它仍然被剩余的共享指针引用。当最后个未完成的引用被销毁时,动态int也会被销毁。

,

make_share 使用传递给它的参数构造一个新对象。在这种情况下,它是 x 我猜你需要shared_ptr<int*>。这就是你想要的吗??

int x = 10;
std::shared_ptr<int*> ptr = std::make_shared<int*>(&x);
**ptr = 11;
std::cout<< x << " " << **ptr;
,
shared_ptr<int> ptr = make_shared<int>(x);

make_shared<int> 构造一个 int 类型的对象,并使用 args 作为 std::shared_ptr 的构造函数的参数列表将其包装在 int 中。所以它的int值就是xvalue;它没有指向 x

它等于:

shared_ptr<int> ptr = make_shared<int>(10);

--

此外,当共享指针时,我需要更改 x 的值 改变了。

您可以简单地将 x 设为 shared_ptr<int> 并共享它。或者你甚至可以直接反弹 x 参考:&x。所以在任何地方都可以修改。没有?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。