首页 > 解决方案 > 通过引用获取 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尝试创建该引用时我仍然会遇到问题。我可以使用一个,但这感觉像是一个非常笨拙的解决方案。thing1ThingTwoRc<ThingOne>

有没有一种惯用的方式来处理这种代码?test()还是有其他一些比功能结构更好的方法?

标签: rustownership

解决方案


推荐阅读