4 ms·
At least in C++ land, that is not quite what is referred to as intrusive lists. It's basically the opposite / inside-out of what you wrote: ```C++ struct MyTyp
by _huayra_ 1y ago
At least in C++ land, that is not quite what is referred to as intrusive lists. It's basically the opposite / inside-out of what you wrote:
```C++
struct MyType : Node<MyType>
{
Node<MyType> next, prev;
// rest of data
};
```
I usually reach for Boost.Intrusive when I need this [0].
[0] https://www.boost.org/doc/libs/1_88_0/doc/html/intrusive/usage.html https://www.boost.org/doc/libs/1_88_0/doc/html/intrusive/usa...
- grandempire 1y agoI see. I am noticing the main difference is that forward_list manages the lifetime and allocation of nodes and that having a pointer to an object is equivalent to a pointer to the node (could be implemented as a helper). The layouts look the same?
- _huayra_ 1y agoAt the byte level, it's quite possible the layouts are the same. However, an "intrusive data structure" means that the nodes themselves are the data. In other words, intrusive is like this: struct T : NodeType<T> { // T data NodeType<T> next, prev; }; whereas non-intrusive data structures the T's are not the nodes themselves struct NodeType<T> { NodeType<T> next, prev; T t; }; Doing non-intrusive means you need to own the lifecycle of the nodes (and make them copyable, move-constructible, or some combo thereof). Intrusive means that the caller can manage the nodes' lifecycles and just say "here's a node, I promise it'll live while the list is still alive" and have that node be on the stack, heap, static, etc.