在下面的代码中,我以两种不同的方式创建了 2 个
Arc
。那么,想知道编译器是否会优化第一个Arc
创建?
use std::sync::Arc;
#[derive(Debug)]
struct A {
id: u64,
a: i32,
b: f64,
c: String,
}
impl A {
fn new(id: u64) -> Self {
Self {
id,
a: 34,
b: 3.4,
c: "default".to_string(),
}
}
}
fn main() {
let a_obj = A::new(1);
// a_obj will be moved while creating arc1 which will result in copy operation.
// So, is this slow compared to the way arc2 is created?
// Or, compiler will optimize this operation?
let arc1 = Arc::new(a_obj);
let arc2 = Arc::new(A::new(2));
}
arc1
持有一个指向结构体 A 的现有实例 a_obj
的引用计数指针。要优化,您可以进行对象克隆
let arc1 = a_obj.clone();
无需使用
arc2
进行优化,因为 A 的新实例是在 Arc::new() 调用中创建的。
arc1
创建克隆,您必须在代码中自行完成。