< 返回版块

函数返回中的引用的lifetime,一定是从参数中来吗?

shitdarling 发表于

	fn wtf() -> (&'a str , String) {
   	 let new_str = String::from("wtfwtf");
   	 let res  =  &'a new_str[..];   //编译错误,我希望slice来自被move的对象,能够做到吗?
   	 (res, new_str)
	}

评论区

woodensea 2019-01-22T03:14:55.282221

这样不行的,String::from分配了新内存而且复制了, 作用域结束了就释放掉了

DDoc 2019-01-30T14:14:35.151823

生命周期不可以凭空出现的,它是个伴随属性,伴随在一个存在的变量。你是不可能割裂他们之间的关系的,假设你这个是可行的,我们提取出一个生命周期伴随这String,然后这个函数一定不是只调用一次的吧?就算只有一次 你这个String被摧毁了,那个指针&'a str怎么办?难道要引入一个null么?还是?所以这个想法是错误的,你只需要扔出这个String就好了,后面需要指针的时候再提取,但是要记住指针如果一定要抛出也是可以的,但是要伴随着一个变量的生命周期。 比如 fn get<'a>(so:String)->&'a str { &so }

1 共 2 评论, 共 1 页