rust中&self、self、&self区别

self的类型,在给出调用者和方法名的前提下,Rust可以准确地推导出方法是否是只读的(&self),是否需要修改数据(&mut self),是否会获取数据的所有权(self)。这种针对方法调用者的隐式借用在实践中可以让所有权系统更加友好且易于使用。

如果我们在调用自身方法时用到自身数据,并保持调用外部的原有所有权,就可以使用&self来借用所有权这样的好处是调用者本身在外部任然有效,借用或者称引用或者称浅拷贝,他们的特点就是不会在方法内回收借用的地址数据,也不会转移原有的变量对值的持有者权,这相当于c++/java中的this但有有概念上的不同,rust避免转移所有权,而导致变量不可用,使用引用或者借用来对自定义结构体实现浅拷贝,这提高了程序的效率,另外还可用使用clone方法避免所有权转移,但该方法会触发深度拷贝,针对堆中的变量,而基本数据类型多和字面量类型大多在编译器就能确定,这些确定的往往被分配到栈中,在栈上的基本类型数据不存在转移权的区分,主要是因为栈上的读写性能相当高,在赋值时没必要限制,直接将右值拷贝一份赋值给左值性能性能影响不大。

相关推荐
大白的编程日记.8 分钟前
【计算机基础理论知识】C++篇(二)
开发语言·c++·学习
阿劲9 分钟前
从业务卡顿到数据库连接池耗尽:Spring Boot项目HikariCP超时问题实战排查
java·后端·面试
网小鱼的学习笔记11 分钟前
python中MongoDB操作实践:查询文档、批量插入文档、更新文档、删除文档
开发语言·python·mongodb
Q_Q51100828521 分钟前
python的保险业务管理与数据分析系统
开发语言·spring boot·python·django·flask·node.js·php
亮11122 分钟前
Maven 编译过程中发生了 Java Heap Space 内存溢出(OutOfMemoryError)
java·开发语言·maven
shepherd11125 分钟前
批量update实现方案全面解析与最佳实践,带你掌握到底怎么批量更新最快、性能最高
后端·mysql
Chef_Chen25 分钟前
从0开始学习R语言--Day40--Kruskal-Wallis检验
开发语言·学习·r语言
GoGeekBaird29 分钟前
使用GoHumanLoop拓展AI Agent人机协同边界,这次连接到飞书
人工智能·后端·github
Zhu_S W31 分钟前
深入理解Java虚拟机:Java内存区域与内存溢出异常
java·开发语言·jvm
灰海36 分钟前
原型与原型链到底是什么?
开发语言·前端·javascript·es6·原型模式·原生js