struct Review {......};//一个结构
vector<Review>temp;//一个结构矢量
while(........)
temp.push_back(......);//这个不是重点
vector<shared_ptr<Review>>ps;//创建一个智能指针矢量
然后怎么用temp初始化这个指针矢量?即让每个指针矢量都指向一个相应的内存块,这个内存块保存相应的temp里的值(*ps[0]=temp[0]这样)
.
我试过这样:
for(int i=0;i<temp.size();i++)
ps.push_back(shared_ptr<Review>(new Review(temp[i])));
然后出现:
error C2678: 二进制“-”: 没有找到接受“std::shared_ptr”类型的左操作数的运算符(或没有可接受的转换)
.
还有这样
vector<shared_ptr<Review>>ps(temp_vec.size());
for (int i = 0; i < temp.size(); i++)
ps[i] = make(temp[i]);
shared_ptr<Review> make(Review r)//一个返回shared_ptr的函数
{
return shared_ptr<Review>(new Review(r));
}
也是同样的错误 怎么回事?
推荐在使用智能指针,shared_ptr的构造过程尽量都使用楼上说的make_shared方式。
用make_shared
struct Review
{
int A;
int B;
};
int main()
{
vector<Review> temp;
for (size_t i = 0; i < 10; i++)
{
Review t;
t.A = i;
t.B = i * i;
temp.push_back(t);
}
vector<shared_ptr<Review> > ps(temp.size());
for (size_t i = 0; i < temp.size(); i++)
{
//ps.push_back(make_shared<Review>(temp[i]));
ps[i] = make_shared<Review>(temp[i]);
}
for (auto itr : ps)
{
cout << itr->A << "\t" << itr->B << endl;
}
return 0;
}