boost库使用:仿SGI-STL实现的一个树节点allocator

 1 //////////////////////////////////////////////////////////////////////////

 2 //code by hzs

 3 //email: [email protected]

 4 //Last modified: 2014-5-18 21:05

 5 //////////////////////////////////////////////////////////////////////////

 6 

 7 #ifndef _TREE_NODE_ALLOC_H

 8 #define _TREE_NODE_ALLOC_H

 9 

10 #include <boost/pool/pool_alloc.hpp>

11 

12 //树节点内存管理:仿SGI-STL-(rb-tree)

13 

14 //arg1: 树节点的值

15 //arg2: 树节点

16 template<typename Value, typename tree_node>

17 class TreeNodeAlloc {

18 public:

19     typedef Value value_type;

20     typedef tree_node* link_type;

21 

22     typedef boost::fast_pool_allocator<tree_node> Tree_Node_Alloc;    //使用boost::fast_pool_allocator

23     Tree_Node_Alloc tree_node_alloc_;

24 

25     link_type get_node() { return Tree_Node_Alloc::allocate(); }    //分配内存空间

26     void put_node(link_type p) { Tree_Node_Alloc::deallocate(p); }    //回收内存空间

27 

28     link_type create_node(const value_type& x) {

29         link_type tmp = get_node();

30         tree_node_alloc_.construct(tmp, tree_node());    //构造(若tree_node中均为POD则无需此步)

31         tmp->value_field = x;    //给值域赋值

32 

33         return tmp;

34     }

35 

36     void destroy_node(link_type p) {

37         tree_node_alloc_.destroy(p);    //析构(无构造则无析构)

38         put_node(p);

39     }

40 };

41 

42 #endif

 

 

 

你可能感兴趣的:(boost)