zoukankan      html  css  js  c++  java
  • rust 裸指针

    *const T*mut T在Rust中被称为“裸指针”

    可以绕过Rust的安全保障

    有一些你需要记住的裸指针不同于其它指针的地方。它们是:

    • 不能保证指向有效的内存,甚至不能保证是非空的(不像Box&);
    • 没有任何自动清除,不像Box,所以需要手动管理资源;
    • 是普通旧式类型,也就是说,它不移动所有权,这又不像Box,因此Rust编译器不能保证不出像释放后使用这种bug;
    • 缺少任何形式的生命周期,不像&,因此编译器不能判断出悬垂指针;
    • 除了不允许直接通过*const T改变外,没有别名或可变性的保障。
    fn main() {   
        let x = 5;
        let raw = &x as *const i32;
        //当你解引用一个裸指针,你要为它并不指向正确的地方负责。为此,你需要unsafe:
        let points_at = unsafe { *raw };      
        println!("raw points at {}", points_at);
    }

    参考:https://www.cntofu.com/book/55/content/Raw%20Pointers%20%E8%A3%B8%E6%8C%87%E9%92%88.md

    https://www.jianshu.com/p/72d9965bb10d

    https://blog.51cto.com/u_15127658/2783296

    https://doc.rust-lang.org/stable/std/primitive.pointer.html

  • 相关阅读:
    谈谈Nullable<T>的类型转换问题
    MiniProfiler使用方法
    捕获变量
    web服务相关的问题或技巧
    对接mysql数据库遇见的一些问题
    委托
    导出到Excel
    斐波那契数列的运算时间
    .net framework摘抄与理解
    sql 语句
  • 原文地址:https://www.cnblogs.com/pu369/p/15181720.html
Copyright © 2011-2022 走看看