標準庫裏有壹個std::allocator模板,在<memory>裏定義,下面是壹些源碼:
namespace std {
template<class T> class allocator {
// ...
typedef size_t size_type;
T* allocate(size_type sz,int =0); // 比較sz個空間
void constuct(T* p, const T& value) { new (p) T(value); } //分配賦值。
// ...
};
template<class Char_type> char_traits { }; // 為空,壹切的類型都是通過對這個類型的專門化來做的,而char_traits<char>和char_traits<wchar_t>是做了專門化,裏面有壹些char_type的比較函數,比整數到字符類型的轉化等。
// 這樣,string和vector的實現就好像這樣:
template<class Char_type, class Traits=char_traits<Char_type>,class Alloc = allocator<Char_type> > class string {
// ...
Alloc alloc;
Char_type* all_ptr;
void push_back(Char_type val); 用alloc.construct即new (pointer) Char_type(val);來實現
string operator+(const char* p);
};
}