STL源代码分析(ch2 内存分配)jjalloc.h
生活随笔
收集整理的這篇文章主要介紹了
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 Utemplate<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 JJeg
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 内存分配)概述
- 下一篇: stdthread(1)thread概述