我在想,如果主线程正在删除shared_ptr,并导致引用计数降为0,并且在删除引用指针堆内存的过程中,同时另一个线程正在复制shared_ptr引用(在复制构造函数内部)。那会发生什么?
答案 0 :(得分:0)
您描述的情况不允许在标准兼容代码中发生。如果它确实出现在代码中,则表示存在未定义的行为。
std::shared_ptr
类不是线程安全的。您不能在没有同步的情况下从2个线程访问同一个实例,因为这是竞争条件。
因此,当读取计数器时,如果它不为零,则递增计数器并复制一些指针。
答案 1 :(得分:0)
我认为这个博客确实回答了我的问题?我不确定。因此,如果shared_ptr是复制到线程,那么我提到的问题就不会发生。
shared_ptr必须至少有2个指针,因此它比原始指针大。只要每个线程都有自己的副本,它还可以保证所有方法的线程安全。