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

共享指针的意外值

如何解决共享指针的意外值

我最近开始学习共享指针,需要一些帮助。

#include <bits/stdc++.h>
using namespace std;

class A
{
    public:
    int a;
    A (int x) {
      a = x;
    }
    int print() {
        return a;
    }
};

int main()
{   
    shared_ptr<vector<shared_ptr<A>>> vec1 = make_shared<vector<shared_ptr<A>>>(1);
    (*vec1)[0] = make_shared<A>(50);
    shared_ptr<vector<shared_ptr<A>>> vec2 = make_shared<vector<shared_ptr<A>>>();
    vec2->push_back((*vec1)[0]);
    for (shared_ptr<A>& obj : *vec2) {
        obj = make_shared<A>(100);
    }
    cout << (*((*vec1)[0])).a;
    return 0;
}

这使输出为 50,而我预计它为 100。有人可以解释一下原因吗?我该怎么做才能把它变成 100? TIA!

解决方法

for (shared_ptr<A> obj : *vec2) {
    obj = make_shared<A>(100);
}

这使得共享指针obj,指向同一个对象A{50}。然后共享指针 obj 被重置为指向新对象 A{100},但原始共享指针 vec2[0] 一直指向第一个对象 A{50}。

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