- 浏览: 725342 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1044)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (64)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
最新评论
Box,Rc,RefCell都是不可变借用,只不过RefCell是运行时检查,Box和RefCell是可变的,Rc不可变但同一个数据可以有多个拥有者
Box<T>类型具有已知大小并指向在堆上分配的数据。该 Rc<T>类型跟踪堆上数据的引用次数,以便数据可以有多个所有者。具有内部可变性的RefCell<T>类型为我们提供了一种类型,当我们需要不可变类型但需要更改该类型的内部值时可以使用该类型;它还在运行时而不是在编译时强制执行借用规则
Box<T>类型具有已知大小并指向在堆上分配的数据。该 Rc<T>类型跟踪堆上数据的引用次数,以便数据可以有多个所有者。具有内部可变性的RefCell<T>类型为我们提供了一种类型,当我们需要不可变类型但需要更改该类型的内部值时可以使用该类型;它还在运行时而不是在编译时强制执行借用规则
use std::ops::Deref; use std::rc::Rc; use std::cell::RefCell; enum List { Cons(i32, Box<List>), Nil, } #[derive(Debug)] enum RcList { RcCons(Rc<RefCell<i32>>, Rc<RcList>), RcNil, } use crate::RcList::{RcCons, RcNil}; use crate::List::{Cons, Nil}; struct MyBox<T>(T); impl<T> MyBox<T> { fn new(x: T) -> MyBox<T> { MyBox(x) } } impl<T> Deref for MyBox<T> { type Target = T; fn deref(&self) -> &Self::Target { &self.0 } } fn hello(name: &str) { println!("Hello, {}!", name); } struct CustomSmartPointer { data: String, } impl Drop for CustomSmartPointer { fn drop(&mut self) { println!("Dropping CustomSmartPointer with data `{}`!", self.data); } } fn main() { //普通智能指针 let num = Box::new(10); println!("{}",num); let list = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil)))))); let mut x = 5; let mut y = &x; println!("y:{}",*(y.deref())); let z = Box::new(x); //z = Box::new(11); //*y = 10; //借用不能修改 //x = 10; assert_eq!(5, x); assert_eq!(5, *y); let m = MyBox::new(String::from("Rust")); hello(&m); hello(&(*m)[..]); let c = CustomSmartPointer { data: String::from("my stuff"), }; //c.drop(); //不能手动调用 let d = CustomSmartPointer { data: String::from("other stuff"), }; println!("CustomSmartPointers created."); let value = Rc::new(RefCell::new(5)); let a = Rc::new(RcCons(Rc::clone(&value), Rc::new(RcNil))); let b = RcCons(Rc::new(RefCell::new(3)), Rc::clone(&a)); let c = RcCons(Rc::new(RefCell::new(4)), Rc::clone(&a)); *value.borrow_mut() += 10; println!("a after = {:?}", a); //这个时候a的值就变了 println!("b after = {:?}", b); println!("c after = {:?}", c); let r = Rc::new(100); let r1 = r; let r2 = r1; println!("r:{}",Rc::strong_count(&r2)); } 10 y:5 Hello, Rust! Hello, Rust! CustomSmartPointers created. a after = RcCons(RefCell { value: 15 }, RcNil) b after = RcCons(RefCell { value: 3 }, RcCons(RefCell { value: 15 }, RcNil)) c after = RcCons(RefCell { value: 4 }, RcCons(RefCell { value: 15 }, RcNil)) Dropping CustomSmartPointer with data `other stuff`! Dropping CustomSmartPointer with data `my stuff`!
发表评论
-
模式匹配
2022-03-27 17:35 141fn main() { //if let ... -
rust mutex
2022-03-27 12:14 190use std::sync::{Arc,Mutex}; ... -
rust channel
2022-03-27 11:58 205use std::sync::mpsc; use std ... -
test框架
2022-03-25 10:18 189#[derive(Debug)] struct Rect ... -
lifeCycle
2022-03-24 14:10 135fn longest<'info>(x: &a ... -
hashmap
2022-03-24 11:11 150use std::collections::HashMap ... -
rust map
2020-08-18 16:02 465fn test_map(){ let a=[1, ... -
rust call
2020-08-13 10:27 311fn call<F>(clousure:F) ... -
rust闭包
2020-08-12 11:00 210返回闭包 fn returns_closure() -&g ... -
rust cell
2020-08-06 11:47 207fn test_cell(){ use std: ... -
rust引用记数
2020-08-06 11:10 277fn test_ref(){ use std:: ... -
rust内存泄漏
2020-08-03 10:20 427原因主要有三种: 1.线程崩溃,析构无法调用 2.使用引用记数 ... -
rust as类型转换
2020-07-24 10:34 539fn testAs(){ let a = 1u3 ... -
rust 线程 spawn
2020-07-24 10:03 263use std::thread; use std::ti ... -
rust println!
2020-07-20 11:09 300fn testPrintln(){ printl ... -
rust trait
2020-07-16 20:27 242使用trait可以让不用的类型实现同一个行为,定义函数的默认实 ... -
rust 范型
2020-07-15 20:00 242fn testOption(){ let i : ... -
rust 优先队列BinaryHeap
2020-07-15 09:22 789Rust提供的优先队列是基于二叉最大堆实现的 fn te ... -
rust set
2020-07-15 09:23 454HashSet<K>和BTreeSet<K& ... -
rust map
2020-07-15 09:23 291BTreeMap是有序的,HashMap是无序的 fn ...
相关推荐
Rust智能指针,用于Objective-C参考计数。 为了确保在适当的时间保留和释放Objective-C对象,我们可以使用Id结构。 要实施别名规则,可以拥有或共享一个Id ; 如果它是拥有的,则意味着Id是对该对象的唯一引用,...
碎纸机 shredder是一个提供垃圾回收智能指针Gc 。 这在您希望共享访问某些数据但数据结构中具有不可预测的周期时非常有用。 (因此,Arc不适合。) shredder具有以下功能: 安全:即时检测错误情况,并保护您免受...
- 指针(引用、原生指针、智能指针) - 并发安全 - 函数、闭包、迭代器等语法特性 3. Rust属性的使用 4. Rust内存管理原理 5. Unicode在Rust中的应用 6. 字符串对象常用方法总结 是一份内容丰富、细节详尽的...
语法面面观:函数与闭包(中)13 | 语法面面观:函数与闭包(下)14 | 语法面面观:模式匹配15 | 语法面面观:智能指针(上)16 | 语法面面观:智能指针(下)17 | 语法面面观:字符与字符串(上)18 | 语法面面观...
该项目旨在为有经验的程序员快速介绍Rust,作为阅读...第1章-基础知识第2章-基本控制流第3章-基本数据结构类型第4章-通用类型第5章-所有权和借用数据第6章-文本第7章-面向对象的编程第8章-智能指针第9章-项目组织和结构
2023 短学期《Rust 开发实训》课程作业 作业 1:完成 myfind ...作业 3:完成 Rust 高级特性的相关 Exercise(智能指针、宏) 作业 4:完成一个简易多任务多线程的 Runtime 作业 5:完成一个简易的 Mini-Redis
一个proc-macro属性,用于自动实现引用的特征,一些常见的智能指针和闭包。 用法 该库需要Rust 1.30.0或更高版本。 将auto_impl添加到您的Cargo.toml ,然后在板条箱中使用它: // In Rust 2015 you still need `...
smart-动态调度的智能指针 该库使您可以从实现共享所有权的我们不同的指针之一动态构建智能指针。它具有线程安全( SyncPointer )和非线程安全( SharedPointer )构造。 当您需要一个API动态地成为多种不同的指针...
射箭射箭是一个锈库,它提供了一种对Rc和Arc智能指针进行抽象的方法。 这样,您就可以创建数据结构,其中射箭是射箭库,它是一个锈库,提供了一种通过Rc和Arc智能指针进行抽象的方法。 这使您可以创建指针类型可参数...
防锈智能指针 这是rust最常用的一些智能指针的简单实现, @jonhoo从此流中获取。
在Tokio中异步执行的智能指针下降。 基本用法 依存关系 async_destruction = " 0.1 " tokio = { version = ' 1 ' , features = [ " full " ] } # Only used in the current example chrono = " 0.4 " 演示 use ...
隐私性可扩展性TODO稳定性,可扩展性TODO特性可将方法的可见性与数据的可见性分开(https://github.com/sfackler/rust-postgres/blob/master/src/lib.rs#L1400)集合是TODO的智能指针泄漏放大(“ Vec :: drain将Vec...
第8章-智能指针 第9章-项目组织与结构 内容目标: 第1-4章应该使您对Rust的美学有浓厚的兴趣 第1-6章应该给C语言的人一个好主意,他们的主意如何翻译 第1-8章应该给C ++的人一个好主意,他们的主意如何翻译 第9+章...
C ++ std::unique_ptr智能指针替换,通过在以太坊区块链上将每个对象表示为NFT来确保唯一性。 什么有效 在程序启动时部署ERC721智能合约 当指针转移到nft_ptr时,调用智能合约以创建令牌 使用Ganache在本地链上进行...
智能指针 并发 Day4 7/7 学习rust语法 学习《Rust程序设计语言》 trait对象 模式 高级特征 学习《Rust编程之道》 第三章:类型系统 Day5 7/8 1:学习rust语法 阅读《rust编程之道》 第四章:类型系统 第五章:内存...
C ++初学者-FreeCodeCamp C ++ 完毕02 排序算法C ++ 完毕03 数据结构C ++ 完毕04 设计模式(ES) --05 智能指针C ++简介C ++06 数字分隔符C ++ / C ++ 14 C ++07 STL C ++08 线程数C ++09 Lambdas C ++10 现代C ++...
Web开发人员的GUI工程指南 写给前端的GUI工程基础入门 目录 写给前端的手动内存管理基础入门 ...半自动化:引用计数与智能指针 触类旁通:进入Rust时代 指数 去做 执照 版权所有(c)2020-2021 Wang Yifeng
'a, T>相应的智能指针, Vec是一个有界的,可增长的数组,它不仅对元素类型通用,而且对基础存储类型( )和索引类型(受启发)通用, BinaryHeap是在Vec之上实现的优先级队列, Deque ,使用环形缓冲区实现的双端...
basedrop提供类似于Box和Arc智能指针,它们将其内容标记为在另一个线程上进行延迟收集,而不是立即释放它们,从而使它们可以安全地放置在实时线程上。执照basedrop是根据和的条款发行的。 捐款按相同条款接受。