< 返回版块

enzo1985 发表于 2020-03-10 10:02

请教个问题,

fn main() {
    let a = 32i64;
    let b = &a;
    let c = &a;
    let s1 = &String::from("hello");  <- 问题1
    //b,c 表示a的const 引用,b,c中存放的是a的地址
    println!("address of a: {:p}", &a);
    println!("address of b: {:p}", &b);
    println!("b={} c={}", b, c);
    //引用的size 为8
    println!("{}", std::mem::size_of::<&i32>());
  
    println!("{}", s1);
}
  1. 上面代码,let s1 = &String::from("hello");这句话是s1 是引用静态数据区的"hello",还是从heap中创建一个"hello",然后s1是这块内存的引用?
  2. 如果是s1 引用heap区的内存,那这篇内存的owner是谁?这里只是借用,没有所有权?

评论区

写评论
Nalleyer 2020-03-11 12:56

SomeClass::some_ctor()在栈上建个东西,然后s1引用了它,至于SomeClass在不在堆上放数据是它的内部行为。我是这么理解的。

所以1:s1引用了栈上一个变量。

欢迎大佬打脸指正。

你这么写就会编译不过:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=3f907f07399c90574493c0efc3a08c31

phper-chen 2020-03-10 10:33

s1是匿名的借用吗

1 共 2 条评论, 1 页