On 08/24/17 01:18, Soul Studios via Boost wrote:
object is referenced by another API. The only alternative to Boost.Intrusive is keeping a pointer to the object in a separate container, which is way too cumbersome. Second is when you want your object to be a member of multiple containers and you don't want or cannot copy it.
Storing a vector of pointers is not only less cumbersome than injecting structures into the original objects,
Having tried both, I will just have to disagree.
it's less expensive. According to the Doom3 BFG technical note (fabiensanglard.net/doom3_documentation/DOOM-3-BFG-Technical-Note.pdf) a vector of indexes to a separate vector(s) of objects is significantly faster than an intrusive list. The same would be true for a vector of pointers (but less so). This approach is also amenable to multiple containers sharing objects.
Whether that is faster or not depends on many factors, primarilly the use scenarios at hand. One can't make a general statement like that without specifics. One factor that could make a vector more efficient than a list is cache friendliness, but an intrusive list could exploit it as well if you manage the storage appropriately.