NeuroWhAI의 잡블로그

[Rust] std::borrow::Cow 본문

개발 및 공부/언어

[Rust] std::borrow::Cow

NeuroWhAI 2018. 1. 3. 18:48


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![123];
    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![123]);
    // 이 시점에서 cow는 이미 Owned 입니다.
    
    cow.to_mut()[0= 1234;
    
    println!("cow : {:?}", cow);
}
cs

cow : [1234, 2, 3]


흐미 복잡하다 복잡해..



Comments