STL源代码分析(ch2 内存分配)jjalloc.h

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL源代码分析(ch2 内存分配)jjalloc.h相关的知识,希望对你有一定的参考价值。

1. jjalloc.h

 	namespace JJ
	 
		template<class T>
		inline T* _allocate(ptrdiff_t size,T*)   
			//当operator new申请一个内存失败的时候.
			//如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常
			//参数为0,则抛出异常
			std::set_new_handler(0);
			T* tmp=(T*)(::operator new((size_t)(size*sizeof(T))));
			if(tmp==0)
				cerr<<"out of memory"<<endl;
				exit(1);
			
			return tmp;
		

		template<class T>
		inline void _deallocate(T* buffer)
			::operator delete(buffer);
		

		template<class T1,class T2>
		inline void _construct(T1*p,const T2& value)
			new(p) T1(value);
		
		template<class T>
		inline void _destroy(T* ptr)
			ptr->~T();
		
	
		template<class T>
		class allocator
		public:
			typedef T           value_type;
			typedef T*          pointer;
			typedef const T*    const_pointer;
			typedef T&          reference;
			typedef const T&    const_reference;
			typedef size_t      size_type;
			typedef ptrdiff_t   difference_type;
		
			//rebind allocator of type U
			template<class U>
			struct rebind
				typedef allocator<U> other;
			;
		
			pointer allocate(size_type n,const void* hint=0)
				std::cout << "allocate " << std::endl;

				return _allocate((difference_type)n,(pointer)0);
			
		
			void deallocate(pointer p,size_type n) _deallocate(p);
			
			void construct(pointer p,const T& value)
				_construct(p,value);
			
			
			void destroy(pointer p) 
				std::cout << "destroy " << *p << std::endl;
				_destroy(p);
			
		
			pointer address(reference x)  
				return (pointer)&x;
			
		
			const_pointer const_address(const_reference x)  
				return (const_pointer)&x;
			

			size_type max_size() const
				return size_type(UINT_MAX/sizeof(T));
			
		;
	
	 //end of namespace JJ 

eg

  int test() 
	 std::vector<int, JJ::allocator<int> > v = 0,1;
	 return 0;
  

输出:

allocate 
destroy 0
destroy 1

【引用】

[1] 代码jjalloc.h

以上是关于STL源代码分析(ch2 内存分配)jjalloc.h的主要内容,如果未能解决你的问题,请参考以下文章

STL源代码分析(ch2 内存分配)标准接口

STL源代码分析(ch2 内存分配)概述

STL源代码分析(ch2 内存分配)uninitialized_fill

STL源代码分析(ch2 内存分配)uninitialized_fill

STL源代码分析(ch2 内存分配)uninitialized_fill_n

STL源码分析--vector