Yes, maybe I will try object variants. But they also have some disadvantages: Size is always determinated by largest variant, and additional space is consumed by discriminator. To get clean, simple code I would have to make each array element an object variant, with a common member bounding box. Then I could access box without any tests, and have to check discriminator field only for the rare cases where I have to access pointer to next node or content field. But that increases memory consumption, and fewer items fit into cache.
I could also divide the array with the node into two, one for the boxes, and one for pointers/content. Would allow easy box access, but would make moving elements more work.
