【发布时间】:2021-09-04 11:55:05
【问题描述】:
我最近开始学习共享指针,需要一些帮助。
#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?蒂亚!
【问题讨论】:
-
试试
for (shared_ptr<A>& obj : *vec2) -
你是按值循环的,所以 100 的元素只存在很短的时间。你想要
shared_ptr<A>& obj -
谢谢!改变了它,但仍然得到输出为 50
-
您的新代码正在更改
vec2的值(并且不再与vec1共享该值,因为make_shared将其替换为不同的共享),但您正在打印 @ 中的值987654327@。您可以使用*obj = 100;将它们的 shared 值更改为 100。 -
谢谢,这成功了!有没有其他方法可以使用共享指针而不是使用原始指针?
标签: c++ c++11 c++17 shared-ptr smart-pointers