mem::take() 函数

mem::swap() 类似, 但是使用默认值 T::default() 来替换.

该函数接口声明如下:

#![allow(unused)]
fn main() {
pub fn take<T: Default>(dest: &mut T) -> T;
}

看一个示例程序:

use std::mem;

#[derive(Debug, Default)]
struct Point {
    x: f32,
    y: f32,
}

fn main() {
    let mut p = Point { x: 3.0, y: 4.0 };
    let old_p = mem::take(&mut p);
    assert_eq!(old_p.x, 3.0);
    assert_eq!(p.x, 0.0);
    assert_eq!(p.y, 0.0);
}

take() 函数的实现

这个函数非常简单, 它直接调用的 replace() 函数:

#![allow(unused)]

fn main() {
#[inline]
pub fn take<T: Default>(dest: &mut T) -> T {
    replace(dest, T::default())
}
}