You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何向由const shared_ptr组成的vector容器中插入元素?

你代码的问题出在两个地方:

  1. const 修饰的位置不符合你的实际需求,同时违反了std::vector对元素类型的要求
  2. std::vector 没有append方法,插入元素应该用push_back或emplace_back

错误原因说明

std::vector 要求存储的元素类型必须是可赋值的,你写的std::vector<const std::shared_ptr<Example>>是把const修饰在shared_ptr本身,等于声明vector里存储的是不可修改的智能指针实例,vector做元素插入、内存重分配时需要对元素做拷贝/移动赋值,自然会编译失败。
而且你想要限制的是Example实例不被修改,不是智能指针本身不能改指向,const加的位置完全错了。

正确实现方案

你需要把const修饰在shared_ptr指向的Example类型上,写法如下:

// shared_ptr本身可正常拷贝赋值,指向的Example实例是const不可修改
std::vector<std::shared_ptr<const Example>> myVector;

插入元素的代码调整为:

const std::shared_ptr<Example> example = createMyObject();
myVector.push_back(example); // 可正常编译

这种写法下,从vector中取出的元素都是std::shared_ptr<const Example>类型,只能调用Example类的const成员函数,所有非const的setter方法都无法调用,完全满足你防止实例被修改的需求。

补充说明

如果你连vector里的智能指针指向都不允许修改(比如不允许把vector里的某个元素替换成另一个智能指针),可以对外只暴露该vector的const引用,接口返回类型为const std::vector<std::shared_ptr<const Example>>&即可。

内容的提问来源于stack exchange,提问作者malajedala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:48:04