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

Zero Lee的專欄

關(guān)于STL allocator

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

1. 在GNU C++中,STL allocator嚴(yán)格遵守C++的標(biāo)準(zhǔn):
看一下的代碼:(定義在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 定義在具體的平臺相關(guān)的頭文件中,例如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)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   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>
            激情成人在线视频| 欧美日韩影院| 影音先锋久久久| 美女精品自拍一二三四| 久久精品国产综合精品| 狠狠色狠狠色综合日日小说| 久久综合久久综合九色| 欧美成人高清视频| 一区二区电影免费在线观看| 日韩视频在线一区二区| 国产欧美日韩视频在线观看| 久久精品国产一区二区电影 | 艳妇臀荡乳欲伦亚洲一区| 洋洋av久久久久久久一区| 国产精品素人视频| 你懂的国产精品| 欧美日韩在线精品| 久久精品99| 欧美国产日韩亚洲一区| 午夜天堂精品久久久久| 久久久夜夜夜| 亚洲男女自偷自拍| 久久久免费av| 亚洲欧美日韩在线综合| 久久久久国产免费免费| 亚洲特级毛片| 狂野欧美性猛交xxxx巴西| 亚洲视频免费在线| 久久亚洲春色中文字幕久久久| 一区二区三区偷拍| 久久久久久久综合| 亚洲免费影视| 欧美另类在线播放| 老鸭窝亚洲一区二区三区| 欧美午夜电影一区| 亚洲第一网站免费视频| 欧美系列精品| 亚洲精品美女91| 原创国产精品91| 欧美日韩国产区一| 欧美一级淫片播放口| 欧美大片专区| 欧美96在线丨欧| 国产视频精品xxxx| 在线亚洲高清视频| 99成人在线| 久久精品五月婷婷| 久久成人这里只有精品| 国产精品国产三级国产普通话99 | 欧美一区二区三区视频在线观看| 日韩视频在线观看一区二区| 久久久精彩视频| 欧美在线观看一区| 国产精品久久久久久久久搜平片 | 亚洲欧美成人在线| 亚洲网站在线| 欧美日韩三级电影在线| 亚洲精品少妇| 9久re热视频在线精品| 欧美大学生性色视频| 欧美激情成人在线| 亚洲精品国产日韩| 欧美国产日韩精品免费观看| 亚洲激情在线| 99精品国产福利在线观看免费 | 欧美日韩中文| 99国产精品视频免费观看一公开| 99国产精品视频免费观看| 欧美美女操人视频| 日韩午夜在线电影| 亚洲在线观看视频网站| 国产精品伦一区| 亚洲欧美日韩天堂一区二区| 久久精品九九| 韩日精品在线| 欧美成人激情视频免费观看| 亚洲三级影院| 亚洲一区中文字幕在线观看| 国产精品自在在线| 久久av一区二区| 欧美激情亚洲另类| 一区二区三区四区五区精品| 国产精品欧美久久| 久久国产日韩欧美| 欧美激情第4页| 宅男在线国产精品| 国产欧美日韩高清| 久久综合久久美利坚合众国| 亚洲精品婷婷| 久久九九精品| 亚洲另类自拍| 国产欧美日韩在线视频| 美日韩在线观看| 在线亚洲自拍| 美女精品在线观看| 亚洲一区二区三区涩| 国产日韩欧美综合精品| 免费欧美日韩国产三级电影| 在线视频亚洲欧美| 欧美成人性网| 午夜久久黄色| 亚洲品质自拍| 国产欧美日韩在线播放| 欧美日产国产成人免费图片| 亚洲欧美日韩爽爽影院| 亚洲美女精品一区| 久久综合久久综合九色| 亚洲男人的天堂在线| 亚洲国产美女精品久久久久∴| 欧美视频在线播放| 老司机精品导航| 亚洲女性裸体视频| 99www免费人成精品| 男女视频一区二区| 欧美一区二区三区在| 99re视频这里只有精品| 在线观看久久av| 国产日产精品一区二区三区四区的观看方式| 免费成人av在线| 久久精品成人一区二区三区蜜臀 | 夜夜嗨av一区二区三区| 欧美国产日韩视频| 看欧美日韩国产| 欧美一二三区在线观看| 亚洲一区二区三区精品视频| 亚洲激情二区| 一区在线观看| 韩国一区电影| 狠狠爱成人网| 韩国av一区二区三区| 国产欧美日韩在线观看| 国产精品视频999| 国产精品分类| 国产精品电影网站| 欧美午夜不卡在线观看免费| 欧美日韩亚洲精品内裤| 欧美日韩1080p| 欧美日韩mv| 欧美日韩视频在线一区二区 | 99国产精品99久久久久久粉嫩| 最新国产精品拍自在线播放| 亚洲国产另类久久久精品极度| 亚洲第一主播视频| 亚洲第一区在线| 亚洲高清视频在线| 亚洲精品乱码久久久久久| 91久久线看在观草草青青| 91久久夜色精品国产九色| 亚洲国产老妈| 日韩亚洲一区二区| 一区二区日韩伦理片| 亚洲一区高清| 久久精品亚洲精品| 久久蜜桃资源一区二区老牛| 美女精品在线观看| 亚洲黄色影片| 一区二区三区蜜桃网| 亚洲欧美日本视频在线观看| 欧美一区在线看| 裸体素人女欧美日韩| 欧美日韩精品一区| 国产精品日本| 影音先锋欧美精品| 一区二区三区日韩在线观看| 亚洲欧洲av一区二区三区久久| 久久成人一区| 亚洲高清中文字幕| 一区二区三区免费看| 久久精品欧美日韩| 欧美精品日韩一区| 国产精品婷婷| 最新国产乱人伦偷精品免费网站| 亚洲一区二区日本| 老色鬼精品视频在线观看播放| 亚洲国产美国国产综合一区二区| 一区二区免费在线观看| 久久精品国产2020观看福利| 欧美精品三级日韩久久| 国产欧美日韩精品专区| 91久久精品久久国产性色也91| 亚洲免费视频网站| 欧美成人激情视频| 亚洲视频中文| 欧美高清在线| 国产一区二区三区高清播放| 日韩亚洲欧美一区| 久久这里只有| 亚洲一区二区黄| 欧美劲爆第一页| 激情欧美日韩| 欧美一区三区三区高中清蜜桃 | 久久精品理论片| 日韩午夜免费| 欧美福利视频网站| 韩日欧美一区二区| 欧美亚洲一区二区在线观看| 亚洲国产小视频| 久久裸体艺术| 国产又爽又黄的激情精品视频| 亚洲午夜成aⅴ人片|