Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[Rust] std::borrow::Cow 본문
Holy cow!
Cow는 빌려진 값 또는 소유된 값을 표현할 수 있는 enum 입니다.
Clone On Write의 약자로 Cow인데요.
말 그대로 변경이 있을때만 복사와 소유가 일어나는 스마트 포인터(?)라고 소개하고 있네요.
이미 소유된 데이터는 복사가 일어나지 않습니다.뭔 소리야.
사실 이전의 글들은 다 이거 발견하고 공부한겁니다.
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | use std::borrow::Cow; fn main() { let data: i32 = 42; let mut cow = Cow::Borrowed(&data); if let Cow::Owned(_) = cow { println!("Owned???"); } *cow.to_mut() = 1234; // 이 시점에서 cow는 Owned가 됩니다. if let Cow::Owned(_) = cow { println!("Owned!!!"); } println!("data : {}", data); println!("cow : {}", cow); } | cs |
Owned!!!
data : 42
cow : 1234
1 2 3 4 5 6 7 8 9 10 11 12 | use std::borrow::Cow; fn main() { let data: Vec<i32> = vec![1, 2, 3]; let mut cow = Cow::from(&data[..]); cow.to_mut()[0] = 1234; // 이 시점에서 cow는 Owned가 됩니다. println!("data : {:?}", data); println!("cow : {:?}", cow); } | cs |
data : [1, 2, 3]
cow : [1234, 2, 3]
1 2 3 4 5 6 7 8 9 10 11 | use std::borrow::Cow; fn main() { let mut cow = Cow::from(vec![1, 2, 3]); // 이 시점에서 cow는 이미 Owned 입니다. cow.to_mut()[0] = 1234; println!("cow : {:?}", cow); } | cs |
cow : [1234, 2, 3]
흐미 복잡하다 복잡해..
'개발 및 공부 > 언어' 카테고리의 다른 글
[C++] 책 읽다가 본 충격적인 코드 - private 멤버 접근 방법 (0) | 2018.01.03 |
---|---|
[Rust] std::ops::Deref (0) | 2018.01.03 |
[Rust] 연관된 타입(Associated Types) (0) | 2018.01.03 |
[Rust] std::iter::IntoIterator (0) | 2018.01.03 |
[Rust] 빌드 스크립트 (0) | 2018.01.02 |
Comments