[][src]Function tao_of_rust::ch13::security_abstract::contract

pub fn contract()

使用Unsafe进行安全抽象

安全抽象的时候需要注意什么?


Basic usage: Vec的insert方法源码示意

正因为存在下面那两个判断条件,才保证了该方法的安全性

pub fn insert(&mut self, index: usize, element: T) {
    let len = self.len();
    // 通过该断言保证了数组不能越界
    assert!(index <= len);
    // 通过判断长度是否达到容量极限来决定是否进行扩容
    if len == self.buf.cap() {
        self.reserve(1);
    }
    unsafe {
        {
           let p = self.as_mut_ptr().offset(index as isize);
           ptr::copy(p, p.offset(1), len - index);
           ptr::write(p, element);
       }
       self.set_len(len + 1);
   }
}Run