I am writing a tree data structure. Each node has a fixed size so I use a fixed size allocator for allocating/deallocating Node
. This gives me a headache:
struct Node {
// other attributes ...
std::array<std::unique_ptr<Node, CustomDeleter>, num_children> children_;
};
Since all allocations/deallocations of Node
are managed by my custom Alloc
, I can't use std::unique_ptr<Node>
for child nodes, I have to ship custom deleter (associated with that allocator) to children.
But Alloc
must know the type of Node
, because Alloc
is a fixed-size allocator for Node
, it should be aware of sizeof(Node)
and alignof(Node)
.
But Node
must know the type of Alloc
, because CustomDeleter
cannot be instantiated without Alloc
! This is a circular depedency!
Have the C++ committee never considered about implementing a tree structure when they designed std::unique_ptr<Node, Deleter>
? How can I resolve this problem?
ps. I can't use std::allocator<Node>
because I should be able to use memory resource other than the default memory resource
Aucun commentaire:
Enregistrer un commentaire