Rust智能指针std::rc::Rc和std::sync::Arc分别类似于C++智能指针std::shared_ptr和std::atomic_shared_ptr吗?
锈智能指针之间存在类比std::rc::Rc,并std::sync::Arc与C ++智能指针std::shared_ptr和std::atomic_shared_ptr?对我来说,它们看起来一样,但可能有一些实现上的细微差别。例如在 C++std::shared_ptr中,控制块中的引用计数是原子的,尽管指针本身不是。在 Rust 中是一样的std::rc::Rc吗?
回答
RustArc<T>在很大程度上等同于 C++shared_ptr<T>
两者都是“智能指针”,通过引用计数提供值的共享所有权。它们都使用原子进行内部操作,以便可以安全地在线程之间跟踪所有权。
一个显着的区别是C ++std::shared_ptr实现提供了一个混叠的构造,其中可以创建一个std::shared_ptr<U>用于的嵌套字段std::shared_ptr<T>,使得std::shared_ptr<U>轨道上的根T对象正常。
C++ 没有 Rust 的等价物 Rc<T>
std::rc::Rc和之间的唯一区别std::sync::Arc是内部参考跟踪不是原子的。这意味着它不能在线程之间使用,但具有避免原子操作的潜在成本的好处。
Rust 没有 C++ 的等价物 atomic<shared_ptr<T>>
C++std::atomic是泛型的,所以它的原子指针类型是 astd::atomic<T*>而 Rust 的只有专用类型std::sync::atomic::AtomicPtr<T>。C++ 有一个专门化,std::atomic<std::shared_ptr<T>>以便多个线程可以原子地访问和修改shared_ptr自身,而不仅仅是共享值。在std::atomic_shared_ptr由OP提到不赞成这种专业化的标准化。
可能存在等效的库,但我只包含了相应标准库中的内容。
也可以看看:
- 什么是 C++ 的 shared_ptr 的 Rust 等价物?
- std::shared_ptr 和 std::experimental::atomic_shared_ptr 有什么区别?
THE END
二维码