rust - 通过引用获取 Rust 所有权?
问题描述
我正在学习 Rust,围绕所有权和引用的一些功能一直困扰着我:
struct ThingOne {
value: u32
}
// Assume I can't change this signature to simply own thing_ref. Maybe
// it's from third-party code.
struct ThingTwo<'a> {
thing_ref: &'a ThingOne
}
fn test<'a>() -> ThingTwo<'a> {
let thing1 = ThingOne { value: 1 };
ThingTwo { thing_ref: &thing1 }
}
显然,这是行不通的——thing1
是堆栈分配的,引用不能安全地转义函数。但是,这种模式似乎很常见,我找不到好的解决方法。我可以将返回类型更改为元组(ThingOne, ThingTwo)
,以便调用者移动 的所有权,但是在初始化结果时thing1
尝试创建该引用时我仍然会遇到问题。我可以使用一个,但这感觉像是一个非常笨拙的解决方案。thing1
ThingTwo
Rc<ThingOne>
有没有一种惯用的方式来处理这种代码?test()
还是有其他一些比功能结构更好的方法?
解决方案
推荐阅读
- arrays - 使用循环创建文件路径数组并通过它们 grep
- c++ - 动态分派到模板函数 C++
- excel - Excel - 比较两行基于文本的数据以创建规则层次结构
- javascript - 将电子邮件 javascript 正则表达式更改为 java
- reactjs - 语义 ui 反应显示与隐藏形式的交互
- python - raise ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: product.pricelist()
- java - ArrayList.get 如何返回它的对象?
- c# - 真假,无所谓
- python - Python ctypes - 获取 CFUNCTYPE 的名称
- reactjs - React Native FlatList在renderItem中复制数据