这更像是一个好奇心问题,但由于boost :: shared_ptr不是线程安全的,为什么它会使用原子引用计数呢?由于析构函数不能安全地跨线程使用,我没有看到这一点。
例如,如果将shared_ptr的副本传递给线程,它将始终销毁,至少在线程最迟结束时。
答案 0 :(得分:4)
我认为你误解了共享指针的线程安全限制。从某种意义上说,共享指针本身不是线程安全的,因为您不希望在两个不同的线程中操作相同的共享指针。但是,同时在两个不同的线程中操作同一个对象几乎绝不安全,而且大多数对象都不是线程安全的。
完全可以线程安全地操纵两个不同线程中的两个不同的共享指针,即使它们是指向同一个对象的指针。
例如,线程可以创建一个对象和一个指向它的共享指针。然后它可以创建另一个指向同一对象的共享指针。然后一个线程可以操作第一个共享指针,另一个线程可以操作第二个共享指针。当两个共享指针中的最后一个(以及任何其他副本)消失时,该对象将被销毁。