bob*_*eff 1 c++ smart-pointers rust
锈智能指针之间存在类比std::rc::Rc,并std::sync::Arc与C ++智能指针std::shared_ptr和std::atomic_shared_ptr?对我来说,它们看起来一样,但可能有一些实现上的细微差别。例如在 C++std::shared_ptr中,控制块中的引用计数是原子的,尽管指针本身不是。在 Rust 中是一样的std::rc::Rc吗?
Arc<T>在很大程度上等同于 C++shared_ptr<T>两者都是“智能指针”,通过引用计数提供值的共享所有权。它们都使用原子进行内部操作,以便可以安全地在线程之间跟踪所有权。
一个显着的区别是C ++std::shared_ptr实现提供了一个混叠的构造,其中可以创建一个std::shared_ptr<U>用于的嵌套字段std::shared_ptr<T>,使得std::shared_ptr<U>轨道上的根T对象正常。
Rc<T>std::rc::Rc和之间的唯一区别std::sync::Arc是内部参考跟踪不是原子的。这意味着它不能在线程之间使用,但具有避免原子操作的潜在成本的好处。
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提到不赞成这种专业化的标准化。
可能存在等效的库,但我只包含了相应标准库中的内容。
也可以看看:
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |