关于C++智能指针问题
怪我咯
怪我咯 2017-04-17 12:00:51
[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));
}

也是同样的错误 怎么回事?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
巴扎黑

用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;
}
ringa_lee

推荐在使用智能指针,shared_ptr的构造过程尽量都使用楼上说的make_shared方式。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号