std::atomic<std::shared_ptr>
shared_ptr的原子读写,默认情况下,shared_ptr的读写是非线程安全的,C++20提供了atomic的shared_ptr使其变成了线程安全的。
优先通过引用来传递shared ptr,因为shared_ptr的值拷贝的开销要比传引用高很多
make_shared和weak_ptr一起工作的时候会导致对象生命周期被延长到和weak_ptr一致
If any std::weak_ptr references the control block created by std::make_shared after the lifetime of all shared owners ended, the memory occupied by T persists until all weak owners get destroyed as well, which may be undesirable if sizeof(T) is large.
因为make_shared使得对象和引用计数的内存分配在一起了,weak_ptr需要能够访问引用计数,因此即使没有人来引用对象了,也不能释放对象本身,因为对象和引用计数是一块内存,没办法只释放部分