首页 > 关于C++智能指针问题

关于C++智能指针问题

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;
}
【热门文章】
【热门文章】