5 ms·
shared_ptr<> is most useful for multithreaded applications where a pointer can be safely shared amongst many threads, where the last one to go out of scope will
by another_another 4y ago
shared_ptr<> is most useful for multithreaded applications where a pointer can be safely shared amongst many threads, where the last one to go out of scope will call delete on the object.
To do this safely the shared_ptr<> class maintains a reference count which is protected by a mutex. This is pretty inefficient if you never share a pointer across threads.
Better to use unique_ptr<> where the Thing that created it is also the Thing that's responsible for deleting it - after making sure that anything it's shared the pointer with is already safely destroyed (another thread, a collection or some other object).
- tlb 4y agostd::shared_ptr doesn't use mutexes in any implementation I know of. They use atomic instructions for incrementing and decrementing the reference count, which are very fast.
- intelVISA 4y agoPlus their thread-safety is limited to the pointer's control block not the actual object it's pointing to. e: nvm reading hard brain mutex too slow
- another_another 4y agoYou're right, an atomic inc/dec would also do just fine. I stand corrected.