首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为不允许修改数据的shared_ptrs容器编写getter

对于不允许修改数据的shared_ptrs容器,我们可以编写一个getter函数来获取容器中的数据。下面是一个示例代码:

代码语言:cpp
复制
#include <iostream>
#include <memory>
#include <vector>

class Data {
public:
    Data(int value) : m_value(value) {}

    int getValue() const {
        return m_value;
    }

private:
    int m_value;
};

class Container {
public:
    void addData(std::shared_ptr<Data> data) {
        m_data.push_back(data);
    }

    const std::vector<std::shared_ptr<Data>>& getData() const {
        return m_data;
    }

private:
    std::vector<std::shared_ptr<Data>> m_data;
};

int main() {
    Container container;
    container.addData(std::make_shared<Data>(1));
    container.addData(std::make_shared<Data>(2));
    container.addData(std::make_shared<Data>(3));

    const std::vector<std::shared_ptr<Data>>& data = container.getData();
    for (const auto& ptr : data) {
        std::cout << ptr->getValue() << std::endl;
    }

    return 0;
}

在上面的代码中,我们定义了一个Data类来表示要存储的数据,然后定义了一个Container类来管理这些数据。Container类中的addData函数用于向容器中添加数据,getData函数用于获取容器中的数据。

注意到getData函数的返回类型是const std::vector<std::shared_ptr<Data>>&,这表示返回的容器是一个常量引用,即不允许修改容器中的数据。这样做可以确保外部代码无法修改容器中的数据,只能读取数据。

在主函数中,我们首先向容器中添加了三个Data对象,然后通过getData函数获取容器中的数据,并使用循环遍历打印出每个Data对象的值。

这样,我们就实现了一个不允许修改数据的shared_ptrs容器,并编写了一个getter函数来获取容器中的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JSP第六篇【自定义标签之传统标签】

编写自定义标签步骤: 编写一个实现Tag接口Java类【标签处理器类】 在WEB-INF目录下创建tld(Tag Library Descriptor)文件,在tld文件中对标签处理类(实现Tag接口...当WEB容器执行到自定义标签结束标记时,调用doEndTag()方法。...我们在编写JSP页面时,经常需要在页面中引入一些逻辑,例如: 控制JSP页面某一部分(标签体)是否执行 控制整个JSP页面是否执行 控制JSP页面内容重复执行 修改JSP页面内容输出 再看回4个变量名字...name为标签名 tagclass为实现类 bodycontent为标签体限制,它有4个值: EMPTY【不允许有标签体】,JSP【允许有JSP代码】 ,scriptless【不允许有脚本代码(也就是...setter、getter方法 public class Demo1 extends TagSupport { //创建成员对象,对应setter、getter

942100
  • Vue全家桶

    Vue 核心库只关注视图层,不仅易于上手,还便于与第三方库(:vue-router,vue-resource,vuex)或既有项目整合。...MVVM 架构中,是不允许数据和视图直接通信,只能通过ViewModel 来通信,而 ViewModel 就是定义了一个Observer观察者- ViewModel 能够观察到数据变化,并对视图下对应内容进行更新...这些 getter/setter 对用户来说是不可见,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。...这里需要注意问题是浏览器控制台在打印数据对象时 getter/setter 格式化并不同,所以你可能需要安装 vue-devtools 来获取更加友好检查接口。...组件系统让我们可以用独立可复用小组件来构建大型应用,几乎任意类型应用界面都可以抽象为一个组件树:页面上每个独立可交互区域视为一个组件每个组件对应一个工程目录,组件所需各种资源在这个目录下就近维护页面不过是组件容器

    39620

    Java开发编程规范: 4.OOP 规约

    【强制】外部正在调用或者二方库依赖接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated 注解,并清晰地说明采用新接口或者新服务是什么。...所以包装 数据类型 null 值,能够表示额外信息,:远程调用失败,异常退出。 【强制】定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值。...反例:POJO 类 gmtCreate 默认值为 new Date(),但是这个属性在数据提取时并没有置入具体值,在更新其它字段时又附带更新了此字段,导致创建时间被修改成当前时间。...在 getter/setter 方法中,不要增加业务逻辑,增加排查问题难度。...2) 不允许修改引用域对象。      3) 不允许被重写方法,:POJO 类 setter 方法。      4) 不允许运行过程中重新赋值局部变量。

    95841

    面向对象三大特征

    封装 何为封装 将抽象性函式接口实现细节部分包装、隐藏起来方法 封装可以被认为是一个保护屏障,防止该类代码和数据被外部类定义代码随机访问。 要访问该类代码和数据,必须通过严格接口控制。...封装最主要功能在于我们能修改自己实现代码,而不用修改那些调用我们代码程序片段。 适当封装可以让程式码更容易理解与维护,也加强了程式码安全性。...public修饰,所以public方法是外部类访问该类成员变量入口,这些方法被称为getter和setter方法。...继承 何为继承 第二大特征——继承! 何为继承?字面上理解,子承父业,即为继承。 那其实Java也是一样,一个(多个)类继承另一个类特征,我们称之为继承。...多态 何为多态 欲解其用,必知其理。 我们先来看看,啥是多态! 现实事物经常会体现出多种形态,学生,学生是人一种,则一个具体同学张三既是学生也是人,即出现两种形态。

    67320

    Java——OOP(面向对象设计)规范

    【强制】外部正在调用或者二方库依赖接口,不允许修改方法签名,避免对接口调用方产生 影响。接口过时必须加@Deprecated 注解,并清晰地说明采用新接口或者新服务是什么。 5....所以包装 数据类型 null 值,能够表示额外信息,:远程调用失败,异常退出。 9. 【强制】定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值。...在getter/setter 方法中,不要增加业务逻辑,增加排查问题难度。...【推荐】final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字: 1) 不允许被继承类,:String 类。...2) 不允许修改引用域对象,:POJO 类域变量。 3) 不允许被重写方法,:POJO 类 setter 方法。 4) 不允许运行过程中重新赋值局部变量。

    24510

    C++中列表初始化,你知多少?

    它被引入主要是为了提供一种统一初始化方式,适用于各种不同数据类型和数据结构,包括基本类型、数组、结构体、类、STL 容器等。...列表初始化对于类型转换更为严格,不允许缩窄转换(请看下面何为窄转化部分)。...不允许缩窄转换 列表初始化对类型转换更为严格,不允许发生缩窄转换,即不允许将一个精度更高类型赋值给一个精度较低类型。 int x = {3.14}; // 错误,尝试缩窄转换 2....,可以用于初始化各种类型对象,包括基本类型、数组、结构体、类、STL 容器等。...unsetunset5、不适用列表初始化情况unsetunset 什么是聚合类型 1、类型是一个普通数组,int[5],char[],double[]等 2、类型是一个类,且满足以下条件: 没有用户声明构造函数

    7810

    Java开发手册之OOP规约

    (提倡同学们尽量不用可变参数编程)正例:public User getUsers(String type, Integer… ids) {…} 【强制】外部正在调用或者二方库依赖接口,不允许修改方法签名...所以包装数据类型null值,能够表示额外信息,:远程调用失败,异常退出。 【强制】定义DO/DTO/VO等POJO类时,不要设定任何属性默认值。...反例:POJO类gmtCreate默认值为new Date();但是这个属性在数据提取时并没有置入具体值,在更新其它字段时又附带更新了此字段,导致创建时间被修改成当前时间。...Service和DAOgetter/setter方法放在类体最后。...2) 不允许修改引用域对象,:POJO类域变量。 3) 不允许被重写方法,:POJO类setter方法。 4) 不允许运行过程中重新赋值局部变量。

    41410

    Vue-基础核心(一)

    :input、select等) v-model:value可以简写为v-model,因为v-model默认收集就是value值 <!...return number; }, // 当有人修改personage属性时,set函数(setter)就会被调用,且会收到修改具体值...对象中所有属性添加到vm上 为每一个添加到vm身上属性,都指定一个getter/setter 在getter/setter内部去擦做(读/写)data中对象属性 <!...,要通过已有属性计算得来 原理:底层借助了Object.defineproperty方法提供getter和setter get函数什么时候执行 初次读取时会执行一次 当依赖数据发生改变时会被再次调用...优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便 备注 计算数学最终会出现在vm身上,直接读取使用即可 如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时所依赖数据发生变化

    1.1K20

    SpringBoot项目目录POJO包

    其中有一些属性及其getter setter方法类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单运算属性也是可以...,但不允许有业务方法,也不能携带有connection之类方法。...但通常情况下,由于 Java Bean 是被容器所创建( Tomcat) ,所以 Java Bean 应具有一个无参构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现...一般在web应用程序中建立一个数据映射对象时,我们只能称它为POJO。...POJO(Plain Old Java Object)这个名字用来强调它是一个普通java对象,而不是一个特殊对象,其主要用来指代那些没有遵从特定Java对象模型、约定或框架(EJB)Java对象

    1.7K40

    property属性相关小记

    (NSInteger、CGFloat、int等) copy:建立一个索引计数为1对象,然后释放旧对象,对实行了NSCopying协议对象类型有效(NSString、NSDictionary、NSArray...readwrite:可读写,默认属性 何为原子性访问?...线程安全问题,声明block属性时,需要确认是否有多个线程同时访问修改block。若没有,则声明为nonatomic,若不确定时,使用atomic。...何为堆和栈? Objective-C对象所占内存总是分配在“堆空间”,且堆内存由开发者释放,即release; 由编译器管理自动释放,在方法中定义变量通常在栈内。...该函数首先根据对象地址获取所有weak指针地址数据,然后遍历数据把其中数据置为nil,最后把记录从weak表中删除,清理对象记录。

    1.1K20

    帮助 Java 开发人员进行 Bean 映射 8 大框架

    Java 中字符串在创建后无法更改)中受益。...如果您想克服编写类似代码行以将数据从一个 bean 复制到另一个复杂性和重复性,那么 bean 映射框架非常有用,因为它提供了简单配置和更少代码行来简化您工作。...对于以下有关推荐框架部分,我将提供框架概述说明,然后编写代码段供您在准备好时开始使用。...JMapper 以零内存消耗提供动态转换、关系映射和静态代码性能优势。它接受两个类输入,Destination(将创建或修改实例)和 Source(包含数据实例)。...强烈建议在开发多层 Web 应用程序时使用它,因为 Orika 如何为 Java Bean 映射构建有效、全面和健壮解决方案。

    2.3K10

    阿里Java编程规约【四】OOP规约

    【强制】外部正在调用接口或者二方库依赖接口,不允许修改方法签名,避免对接口调用方产生影 响。接口过时必须加 @Deprecated 注解,并清晰地说明采用新接口或者新服务是什么。...所以包装数据类型 null 值,能够表示额外 信息,:远程调用失败,异常退出。 14. 【强制】定义 DO / PO / DTO / VO 等 POJO 类时,不要设定任何属性默认值。...【推荐】final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字: 1)不允许被继承类,:String 类。...2)不允许修改引用域对象,:POJO 类域变量。 3)不允许被覆写方法,:POJO 类 setter 方法。 4)不允许运行过程中重新赋值局部变量。...(一个软件实体类、模块和函数应该对扩展开放,对修改关闭。)

    55310

    OC知识--成员变量(属性,实例变量)相关知识

    _size = size; } setter方法好处 不让数据暴露在外,保证了数据安全性 对设置数据进行判断,过滤不合理值(比如空值、负数等等) 2. getter方法 作用...:为调用者返回对象内部成员变量值,用来访问成员变量 命名规范: 必须是对象方法 必须有返回值,返回值类型和成员变量类型一致 方法名必须是成员变量去掉下划线 一定是没有参数 举例 :如果成员变量为...可以让我们在使用getter方法获取数据之前,对数据进行加工 比如双十一活动,我们希望对全线商品价格在原来价格基础上打五折,那么我们只要去改成品类价格getter方法就可以了,让他返回值为价格...如果内部成员变量,只允许外界读取,但是不允许修改,则通常只提供getter方法而不提供setter方法 成员变量名命名以下划线开头,setter和getter方法名不需要带下划线 成员变量名使用下划线开头有两个好处...如果想对传入数据进行过滤,那么我们就必须重写getter/setter方法 如果不想对传入数据进行过滤,仅仅是提供一个方法给外界操作成员变量,那么就可以使用@property 如果重写了setter

    2.5K60

    JAVA开发规范常用技巧总结(共12个)

    RPC方法返回值和参数都统一使用包装类数据。局部变量中使用基本数据类型。...6、当pojo类在进行编写时候要重写相应toString方法,如果该pojo中继承了另外一个pojo类,那么请在相应tostring函数中加入super.toString()方法。...7、在pojogetter和setter方法里面,不要增加业务逻辑代码编写,这样会增加问题排查难度。...下列情况使用 final 关键字: 不允许被继承类,:String 类。 不允许修改引用域对象,:POJO 类域变量。 不允许被重写方法,:POJO 类 setter 方法。...HashTable 不允许为null 不允许为null 线程安全 ConcurrentHashMap 不允许为null 不允许为null 线程安全 13、可以利用 Set 元素唯一特性,可以快速对一个集合进行去重操作

    58700

    Java一分钟之-集合框架进阶:Set接口与HashSet

    在Java集合框架中,Set接口是另一种重要集合类型,它不允许元素重复,并且元素顺序是不确定。HashSet是Set接口一个实现,它使用哈希表来存储元素,提供了快速添加、删除和查找操作。...Set接口没有定义特定元素顺序,但某些实现类(TreeSet)会根据元素自然排序或比较器来决定顺序。 核心方法 add(E element): 添加元素,如果集合中已存在该元素,则不会添加。...HashSet不允许元素重复,这意味着如果尝试添加已存在元素,add方法将返回false。 特性 快速添加:通过哈希函数快速定位元素,添加效率高。...线程安全性 问题:在多线程环境中,多个线程同时修改HashSet可能导致数据不一致。 示例:两个线程同时向HashSet添加元素。 ...); users.add(new User("Alice")); // false,因为name相同,被视为重复 五、总结 理解并熟练使用Set接口和HashSet,可以帮助我们更好地组织和管理不重复数据

    16410

    Vuex

    )的话,二者结构完全一致,所以说Vuex更像是中规中矩Flux实现 store 作为state容器,另外充当dispatcher 用store来管理state,从作用上看相当于global.share...= {},但Vuex里store.state有一些别的特点: state是响应式数据 不允许直接修改store持有的state,必须显式commit mutation 与组件data类似,store.state...也是响应式,与组件计算属性关联起来,state更新精确传递到view层 而不允许直接修改store.state也是道德约束,虽然在开启strict选项后会报错,而实际上修改是可以生效,这里不做强约束...比如表单输入数据 可共享数据状态,放在状态层。...) Vuex作为插件,通过修改Vue.prototype,把$store挂上去,让所有vm共享 4.input等双向绑定场景与store.state不能直接修改冲突 通过计算属性getter/setter

    1.2K20

    Java——深入分析类与对象(封装性、构造方法与匿名对象、简单Java类开发原则)

    最需要解决问题是将内部属性保护起来,不允许外部直接操作,可以使用private 关键字,加入后,name 和age使用范围只能是在Person这个类中,类外部不能直接访问,安全性最高。...private封装,封装后属性必须严格按照要求编写setter与getter方法。...但默认情况下属性初始化内容都是对应数据类型默认值,所以,在实例化时若想传递属性内容,可以靠构造方法完成,省略了一系列setter调用,实际开发中应用较多。...2.2、匿名对象 匿名对象指的是没有名字对象,对象名字都保存在了栈中。 :Person per = new Person("张三",10); 就是有名对象,per是对象名。...2)类中所有属性必须使用private封装; 3)所有封装属性必须编写setter、getter方法; 4)类中可以构造若干构造方法,但是必须有一个明确无参构造方法; 5)类中不允许有输出操作,所有输出必须将数据返回给调用处输出

    46240
    领券