我可以同时复制单个shared_ptr吗?

Can I copy a single shared_ptr simultaneously?

本文关键字:ptr shared 单个 复制 我可以      更新时间:2023-10-16

我知道在两个单独的线程中复制和重置单个shared_ptr是有问题的,但是如果两个线程试图创建同一个shared_ptr对象的副本呢?它需要同步吗?这里的参考计数器能正常工作吗?

std::shared_ptr<T> global_t(new T());
// Thread 1
std::shared_ptr<T> t1(global_t);
do something with t1
// Thread 2
std::shared_ptr<T> t2(global_t);
do something with t2

std::shared_ptr的refcount是同步的,所以并发复制是可以的(尽管可能性能较差)。并且托管对象只有在其refcount降为零时才会被释放。