如何解决共享指针的意外值
我最近开始学习共享指针,需要一些帮助。
#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 举报,一经查实,本站将立刻删除。