日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。