
"Peter Dimov" <pdimov@mmltd.net> writes:
The weak_ptr adds an extra count (1 word) but more importantly requires a mutex, at least on platforms lacking more advanced lock-free primitives such as InterlockedCompareExchange.
The theoretical minimum cost of a non-intrusive pointer is:
- per-instance pointer to the count; - one word for the count.
Feature (1) above adds:
- vtable - pointer
The functor need not be present when not used, although the current code base does not do that. It can also be optimized out when it's an empty class with the help of boost::compressed_pair. Again, the current code base doesn't do it, but we're talking about the design-imposed overhead here.
You could also replace the vtable with a function pointer per Boost.Function and eliminate some space overheads associated with dynamic type info. -- Dave Abrahams Boost Consulting www.boost-consulting.com