smart_ptr
std::shared_ptr
引用计数是原子的, 大多数解释是 shared_ptr 本身是线程安全的,但是对指向对象的读写不是线程安全的。
本身是线程安全的是什么意思呢,理解为在多线程中对shared_ptr 的读、复制和当引用计数大于 1 时的写是线程安全的。特别注意的引用计数大于 1 时的写,可以是该shared_ptr 本身的析构,也可以是赋值为其他的 shared_ptr,因为引用计数是线程安全的,其变化能够立刻被其他的 shared_ptr 感知到,因此当引用计数大于 1时,对shared_ptr 本身的写是不会影响指向对象的。但是当引用计数等于 1 时,其在多线程的写过程中,是会发生对指向对象的析构调用的,即发生了对指向对象的读写,因此该过程是线程不安全的。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!