
I see that shared_ptr is quite costly in multithreaded environments cause it would need DCAS, and thus uses a spinlock in cases where it is not available. intrusive_ptr, which is only one word, does not need that. Shouldn't intrusive_ptr be put forward more, then? Or better, why not make a shared_ptr-like shared_obj, a container, responsible for allocating the object, thus able to allocate a struct { T value; int refcount; } instead of T's, and advocate its usage? Such an interface could also trivially use a good garbage collection algorithm instead of refcounting. It seems to me that shared_ptr was made inefficient by design, which is not a really good thing since it is getting more and more popular. Could someone confirm or infirm this?