青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Zero Lee的專欄

關于STL allocator

關于STL 中allocator的接口與實現,C++標準有比較清楚的定義:
http://en.wikipedia.org/wiki/Allocator_(C%2B%2B) 

1. 在GNU C++中,STL allocator嚴格遵守C++的標準:
看一下的代碼:(定義在bits/allocator.h文件中)
 1 namespace std
 2 {
 3   template<typename _Tp>
 4     class allocator;
 5 
 6   template<>
 7     class allocator<void>
 8     {
 9     public:
10       typedef size_t      size_type;
11       typedef ptrdiff_t   difference_type;
12       typedef void*       pointer;
13       typedef const void* const_pointer;
14       typedef void        value_type;
15 
16       template<typename _Tp1>
17         struct rebind
18         { typedef allocator<_Tp1> other; };
19     };
20 
21   /**
22    *  @brief  The "standard" allocator, as per [20.4].
23    *
24    *  (See @link Allocators allocators info @endlink for more.)
25    */
26   template<typename _Tp>
27     class allocator: public ___glibcxx_base_allocator<_Tp>
28     {
29    public:
30       typedef size_t     size_type;
31       typedef ptrdiff_t  difference_type;
32       typedef _Tp*       pointer;
33       typedef const _Tp* const_pointer;
34       typedef _Tp&       reference;
35       typedef const _Tp& const_reference;
36 
37       typedef _Tp        value_type;
38 
39       template<typename _Tp1>
40         struct rebind
41         { typedef allocator<_Tp1> other; };
42 
43       allocator() throw() { }
44 
45       allocator(const allocator& a) throw()
46       : ___glibcxx_base_allocator<_Tp>(a) { }
47 
48       template<typename _Tp1>
49         allocator(const allocator<_Tp1>&) throw() { }
50 
51       ~allocator() throw() { }
52 
53       // Inherit everything else.
54     };
55 
56   template<typename _T1, typename _T2>
57     inline bool
58     operator==(const allocator<_T1>&, const allocator<_T2>&)
59     { return true; }
60 
61   template<typename _T1, typename _T2>
62     inline bool
63     operator!=(const allocator<_T1>&, const allocator<_T2>&)
64     { return false; }
65 
66   // Inhibit implicit instantiations for required instantiations,
67   // which are defined via explicit instantiations elsewhere.
68   // NB: This syntax is a GNU extension.
69 #if _GLIBCXX_EXTERN_TEMPLATE
70   extern template class allocator<char>;
71 
72   extern template class allocator<wchar_t>;
73 #endif
74 
75   // Undefine.
76 #undef ___glibcxx_base_allocator
77 } // namespace std
78 

template ___glibcxx_base_allocator 定義在具體的平臺相關的頭文件中,例如i386-redhat-linux/bits/c++allocator.h:
可以看出GNU c++的allocator其實采用的是new/delete-based allocation.

 1 namespace __gnu_cxx
 2 {
 3   /**
 4    *  @brief  An allocator that uses global new, as per [20.4].
 5    *
 6    *  This is precisely the allocator defined in the C++ Standard.
 7    *    - all allocation calls operator new
 8    *    - all deallocation calls operator delete
 9    *
10    *  (See @link Allocators allocators info @endlink for more.)
11    */
12   template<typename _Tp>
13     class new_allocator
14     {
15     public:
16       typedef size_t     size_type;
17       typedef ptrdiff_t  difference_type;
18       typedef _Tp*       pointer;
19       typedef const _Tp* const_pointer;
20       typedef _Tp&       reference;
21       typedef const _Tp& const_reference;
22       typedef _Tp        value_type;
23 
24       template<typename _Tp1>
25         struct rebind
26         { typedef new_allocator<_Tp1> other; };
27 
28       new_allocator() throw() { }
29 
30       new_allocator(const new_allocator&) throw() { }
31 
32       template<typename _Tp1>
33         new_allocator(const new_allocator<_Tp1>&) throw() { }
34 
35       ~new_allocator() throw() { }
36 
37 
38       pointer
39       address(reference __x) const { return &__x; }
40 
41       const_pointer
42       address(const_reference __x) const { return &__x; }
43 
44       // NB: __n is permitted to be 0.  The C++ standard says nothing
45       // about what the return value is when __n == 0.
46       pointer
47       allocate(size_type __n, const void* = 0)
48       { return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); }
49 
50       // __p is not permitted to be a null pointer.
51       void
52       deallocate(pointer __p, size_type)
53       { ::operator delete(__p); }
54 
55       size_type
56       max_size() const throw()
57       { return size_t(-1) / sizeof(_Tp); }
58 
59       // _GLIBCXX_RESOLVE_LIB_DEFECTS
60       // 402. wrong new expression in [some_] allocator::construct
61       void
62       construct(pointer __p, const _Tp& __val)
63       { ::new(__p) _Tp(__val); }
64 
65       void
66       destroy(pointer __p) { __p->~_Tp(); }
67     };
68 
69   template<typename _Tp>
70     inline bool
71     operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
72     { return true; }
73 
74 
75   template<typename _Tp>
76     inline bool
77     operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
78     { return false; }
79 } // namespace __gnu_cxx
80 

posted on 2012-06-17 10:37 Zero Lee 閱讀(546) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品99久久久久久宅男| 国产亚洲精品福利| 亚洲黄色片网站| 欧美成人首页| 欧美区亚洲区| 亚洲欧美中文字幕| 久久不射网站| 91久久综合| 一区二区三区波多野结衣在线观看| 欧美日韩欧美一区二区| 亚洲综合视频网| 欧美一区二区在线观看| 亚洲国产福利在线| 999在线观看精品免费不卡网站| 欧美日韩精品欧美日韩精品| 亚洲欧美日本国产专区一区| 亚洲欧美激情四射在线日| 激情亚洲一区二区三区四区| 欧美国产日韩亚洲一区| 国产精品v亚洲精品v日韩精品 | 亚洲国产精品一区二区久| 亚洲国产岛国毛片在线| 国产精品高潮在线| 免费日韩av片| 国产精品久久久久9999高清| 久久综合网色—综合色88| 欧美日韩国产一级片| 欧美中文字幕在线| 欧美精品一区二区精品网| 久久精品视频亚洲| 欧美裸体一区二区三区| 久久精品国产一区二区电影 | 日韩午夜精品| 一区二区在线观看视频在线观看| 亚洲激情中文1区| 激情丁香综合| 亚洲视频观看| 亚洲精品欧美日韩专区| 久久成人综合视频| 午夜精品久久久久久久久久久久| 久久亚洲视频| 久久久久国色av免费观看性色| 欧美成人精品在线观看| 久久噜噜亚洲综合| 国产精品视频精品视频| 亚洲欧洲一区二区在线观看| 国内成人自拍视频| 午夜国产不卡在线观看视频| 中文久久乱码一区二区| 欧美国产日韩在线观看| 久久综合99re88久久爱| 国产精品一区二区男女羞羞无遮挡 | 久久综合久久综合九色| 国产精品看片你懂得| 亚洲欧洲精品一区二区| 亚洲欧洲另类国产综合| 久久久亚洲综合| 久久久久久久97| 国产视频一区在线观看| 亚洲欧美日本另类| 久久se精品一区精品二区| 国产精品成人在线观看| 一区二区三区四区五区视频| av不卡在线观看| 欧美精品福利视频| 亚洲精品在线观看视频| 亚洲精品一区在线观看| 欧美激情女人20p| 亚洲三级影片| 亚洲无线一线二线三线区别av| 欧美伦理影院| 中文成人激情娱乐网| 亚洲欧美激情四射在线日 | 久久人人爽人人爽爽久久| 久久婷婷成人综合色| 在线成人av| 欧美成人免费在线观看| 亚洲欧洲综合| 亚洲在线观看免费| 国产日韩欧美在线| 久久久久看片| 亚洲欧洲综合另类| 亚洲一区二区三区在线看| 国产精品久久久久毛片大屁完整版| 亚洲无线视频| 久久黄色级2电影| 伊人久久成人| 欧美日韩精品一本二本三本| 国产精品99久久99久久久二8| 欧美在线一级va免费观看| 伊人狠狠色j香婷婷综合| 欧美成人网在线| 一区二区日韩精品| 久久资源在线| 一区二区免费在线视频| 国产视频久久久久久久| 欧美成人资源网| 亚洲一区二区三区在线观看视频| 久久久久99| 99精品99| 国产一区二区三区在线免费观看 | 亚洲人成久久| 久久久欧美精品| 一区二区三区四区五区视频| 国产偷国产偷亚洲高清97cao | 亚洲欧美日韩精品一区二区 | 久久婷婷激情| 亚洲性色视频| 91久久国产综合久久| 国产免费观看久久黄| 欧美极品一区二区三区| 欧美在线播放| 亚洲一区二区三区四区五区黄| 欧美成人第一页| 久久久免费精品| 亚洲综合电影| 一本久道久久久| 亚洲激情视频网| 亚洲黄色三级| 久久网站热最新地址| 午夜精品福利一区二区蜜股av| 亚洲国产高潮在线观看| 国精产品99永久一区一区| 欧美视频在线免费看| 免费在线看一区| 久久精品一二三区| 午夜久久久久久久久久一区二区| 亚洲日本精品国产第一区| 欧美高清你懂得| 欧美成人亚洲成人日韩成人| 欧美中文在线视频| 午夜宅男欧美| 午夜精品久久久久久99热软件| 亚洲精品视频一区| 亚洲日本精品国产第一区| 亚洲国产精品久久久久久女王| 国产视频综合在线| 国产欧美一区二区精品性| 国产精品美女久久久免费| 欧美午夜不卡视频| 欧美图区在线视频| 欧美午夜不卡影院在线观看完整版免费| 欧美激情一区二区三区不卡| 牛牛影视久久网| 免费观看在线综合| 欧美激情亚洲一区| 欧美精品激情在线观看| 欧美久久久久| 欧美日韩精品一区二区天天拍小说| 欧美国产日韩一区二区| 欧美日韩卡一卡二| 国产精品乱码一区二三区小蝌蚪 | 欧美成人午夜剧场免费观看| 噜噜噜91成人网| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美精品日韩精品| 欧美日韩在线不卡一区| 国产精品成人播放| 国产欧美精品日韩| 樱桃成人精品视频在线播放| 亚洲激情av| 亚洲一区二区三区色| 久久都是精品| 欧美岛国在线观看| 日韩亚洲欧美成人| 亚洲欧美一区在线| 久久久久久亚洲精品杨幂换脸| 蜜乳av另类精品一区二区| 欧美人交a欧美精品| 国产精品欧美日韩久久| 黄色资源网久久资源365| 亚洲精品一区二区三区av| 亚洲少妇在线| 久久亚洲影院| 日韩一级精品视频在线观看| 亚洲私拍自拍| 久久一区激情| 国产精品福利av| 尤物在线观看一区| 亚洲一区二区三区四区五区午夜| 久久www免费人成看片高清| 亚洲狠狠丁香婷婷综合久久久| 99精品视频免费观看| 久久精品国产清高在天天线| 欧美日韩国产综合视频在线| 国产日本精品| 一区二区三区 在线观看视频| 欧美在线在线| 一本到高清视频免费精品| 久久久青草婷婷精品综合日韩| 欧美日韩另类综合| 亚洲乱码国产乱码精品精可以看| 先锋资源久久| 欧美三级电影一区| 亚洲国产精品久久人人爱蜜臀 | 亚洲国产一区二区在线| 午夜在线观看免费一区| 亚洲精品久久久久| 久久五月婷婷丁香社区| 国产一区二区三区高清|