gpt4 book ai didi

rust - 是否可以从 Vec 创建 Arc<[T]>?

转载 作者:行者123 更新时间:2023-11-29 07:51:54 24 4
gpt4 key购买 nike

更具体地说,为什么doesn't Arc<T>实现 from_raw具有动态大小的 T同时 Box<T> does

use std::sync::Arc;

fn main() {
let x = vec![1, 2, 3].into_boxed_slice();
let y = Box::into_raw(x);
let z = unsafe { Arc::from_raw(y) }; // ERROR
}

( play )

正如评论中指出的那样,Arc::from_raw 必须 与来自 Arc::into_raw 的指针一起使用,所以上面的例子没有意义。我最初的问题(是否有可能从 Arc<[T]> 中创建一个 Vec<T>)仍然是:这可能吗?如果不可能,为什么?

最佳答案

从 Rust 1.21.0 开始,您可以这样做:

let thing: Arc<[i32]> = vec![1, 2, 3].into();

这是由 RFC 1845 启用的:

In addition: From<Vec<T>> for Rc<[T]> and From<Box<T: ?Sized>> for Rc<T> will be added.

Identical APIs will also be added for Arc.

在内部,这个 uses a method called copy_from_slice , 所以配置了Vec不被重用。有关详细信息,请查看 DK.'s answer .

关于rust - 是否可以从 Vec<T> 创建 Arc<[T]>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44636833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com