面试题答案
一键面试- 优化思路:
- 可以使用
Lazy
来延迟初始化B
。Lazy
允许我们在需要使用B
的实例时才进行初始化,而不是在A
初始化时就立刻初始化B
。
- 可以使用
- 代码示例:
use std::sync::LazyLock;
struct B {
data: String,
}
impl B {
fn new() -> Self {
// 模拟复杂的初始化
std::thread::sleep(std::time::Duration::from_secs(1));
B {
data: "Initialized B".to_string(),
}
}
}
struct A {
b: LazyLock<B>,
}
impl A {
fn new() -> Self {
A {
b: LazyLock::new(|| B::new()),
}
}
fn get_b(&self) -> &B {
&self.b
}
}
在上述代码中:
B
结构体模拟了初始化复杂的类型,在new
方法中使用std::thread::sleep
模拟耗时操作。A
结构体包含一个LazyLock<B>
类型的成员变量b
。A::new
方法中,b
使用LazyLock::new
进行初始化,LazyLock::new
的闭包中调用B::new
,这意味着只有在第一次访问b
时,B
才会被初始化。get_b
方法用于获取B
的引用,此时B
才会被真正初始化(如果之前未初始化的话)。