boost库使用:仿SGI-STL实现的一个树节点allocator
1 ////////////////////////////////////////////////////////////////////////// 2 //code by hzs 3 //email: huangzhesi@gmail.com 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