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

Zero Lee的專欄

關于STL allocator

關于STL 中allocator的接口與實現(xiàn),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 閱讀(565) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久免费视频在线观看| 亚洲精品视频在线| 亚洲男人第一网站| 国产精品亚洲产品| 久久精品国产在热久久 | 亚洲在线一区二区| 欧美无砖砖区免费| 欧美一级淫片aaaaaaa视频| 亚洲国产天堂久久国产91| 乱人伦精品视频在线观看| 亚洲全部视频| 在线一区二区三区做爰视频网站| 亚洲视频中文| 国产欧美视频在线观看| 美女主播一区| 久久一区二区三区超碰国产精品| 欧美视频不卡| 欧美与黑人午夜性猛交久久久| 狼人社综合社区| 牛牛精品成人免费视频| 亚洲一区日韩在线| 久久九九99视频| 一区二区三区高清视频在线观看| 久久不射中文字幕| 久久激情五月激情| 日韩亚洲国产欧美| 午夜精品福利在线| 亚洲欧洲在线看| 亚洲自拍啪啪| 亚洲日本aⅴ片在线观看香蕉| 久久亚洲视频| 欧美亚男人的天堂| 美女任你摸久久| 国产精品久久久久av| 久久人人爽人人爽| 欧美视频在线观看一区| 欧美成年人视频网站欧美| 国产精品久久久久77777| 免费观看日韩| 国产精品影片在线观看| 91久久精品久久国产性色也91| 久久久中精品2020中文| 亚洲视频电影图片偷拍一区| 久久久国产亚洲精品| 亚洲主播在线播放| 免费一级欧美片在线播放| 欧美自拍丝袜亚洲| 国产精品v欧美精品v日本精品动漫 | 亚洲精品免费在线| 国产一区二区日韩精品| 一区二区三区欧美成人| 亚洲第一中文字幕| 亚洲欧美日韩成人| 亚洲一级片在线看| 欧美精品福利视频| 欧美激情五月| 亚洲国产99精品国自产| 欧美在线视屏| 久久久久国产成人精品亚洲午夜| 欧美在线观看你懂的| 亚洲视频观看| 欧美日韩大陆在线| 亚洲人成网站精品片在线观看| 欧美日韩国产精品一区二区亚洲| 99国产精品久久久久久久成人热| 亚洲精品永久免费| 亚洲人成在线观看一区二区| 玖玖玖国产精品| 久久久中精品2020中文| 韩国av一区| 久久久久久久久综合| 母乳一区在线观看| 在线成人h网| 欧美99在线视频观看| 亚洲大黄网站| 一二三区精品福利视频| 欧美日一区二区三区在线观看国产免| 亚洲欧美文学| 国产精品亚洲а∨天堂免在线| 久久婷婷一区| 在线成人激情视频| 欧美激情第二页| 99精品久久免费看蜜臀剧情介绍| 国产精品尤物福利片在线观看| 久久综合九色综合欧美就去吻 | 亚洲视频精品在线| 欧美一区精品| 在线观看91精品国产麻豆| 久久深夜福利| 日韩亚洲欧美一区二区三区| 亚洲欧美www| 一区二区三区在线观看国产| 蜜臀久久99精品久久久久久9| 在线视频亚洲欧美| 国产精品剧情在线亚洲| 欧美诱惑福利视频| 欧美激情aⅴ一区二区三区| 亚洲看片免费| 国产精品自拍三区| 免费在线成人av| 中日韩高清电影网| 久热精品在线| 在线午夜精品自拍| 国内一区二区三区| 欧美精品v日韩精品v国产精品| 久久中文字幕导航| 一区二区日本视频| 激情懂色av一区av二区av| 欧美精品一区二区三区在线看午夜| 久久精品男女| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美日韩精品中文字幕| 欧美自拍偷拍午夜视频| 99国产一区| 欧美91福利在线观看| 午夜精品美女久久久久av福利| 免费成人激情视频| 欧美一区二区三区视频在线 | 合欧美一区二区三区| 欧美精品在线免费播放| 久久精品视频在线免费观看| 日韩视频免费在线观看| 嫩模写真一区二区三区三州| 中文在线一区| 亚洲黄一区二区| 狠狠88综合久久久久综合网| 欧美亚韩一区| 欧美日韩精品久久| 欧美国产日韩亚洲一区| 久久爱www久久做| 亚洲欧美日韩另类精品一区二区三区| 午夜精品久久久久久久久| 日韩视频在线观看| 一区二区三区我不卡| 国产欧美日韩一区| 国产精品日韩久久久久| 欧美日韩精品免费| 欧美喷水视频| 欧美国产三级| 欧美国产另类| 欧美激情91| 欧美精品在线观看| 欧美日本国产精品| 欧美精品一区二区三区蜜臀 | 亚洲第一精品影视| 美女国产精品| 美女视频黄 久久| 久久高清国产| 欧美影院在线| 欧美专区在线观看一区| 先锋影音久久| 久久精品国产欧美亚洲人人爽| 亚洲国产99精品国自产| 在线日韩av片| 亚洲免费黄色| 亚洲免费在线| 欧美专区日韩专区| 久色成人在线| 亚洲第一精品久久忘忧草社区| 亚洲每日更新| 亚洲视频香蕉人妖| 欧美一区二区久久久| 久久久久久久91| 欧美1区免费| 亚洲乱码视频| 亚洲欧美日韩网| 久久中文字幕一区| 欧美大色视频| 国产精品国产精品| 国外成人性视频| 亚洲精品一区二区三区婷婷月| 国产精品揄拍一区二区| 国内精品亚洲| 亚洲看片免费| 久久国产高清| 91久久综合| 日韩小视频在线观看| 亚洲欧美日韩国产中文在线| 久久嫩草精品久久久精品| 欧美精品成人91久久久久久久| 久久国内精品自在自线400部| 亚洲乱码国产乱码精品精| 亚洲欧美日韩中文视频| 久久久99爱| 国产精品va在线播放我和闺蜜| 欧美韩国日本综合| 国产欧美日本一区视频| 亚洲精品小视频| 性欧美xxxx视频在线观看| 欧美岛国在线观看| 亚洲一区二区黄色| 女仆av观看一区| 国产一区视频网站| 一区二区三区成人精品| 女女同性精品视频| 亚洲欧美日韩视频一区| 欧美精选在线| 91久久精品日日躁夜夜躁欧美| 亚洲二区在线观看| 久久黄色小说|