??????C++?У??????????new(delete)???????????????????new???????????????????棬?????·????????й????????????????new??????????к????????????????????????????????????????new??????????????????????????
??????????????????????????????????????????????????????棬?????????????????й????????????????????????????????У????????????????
??????1????????????????????????????????????????
??????2?????????????????????????????????????????????
????string* pstr = new string[5];
??????????????????????????????????vector<string>?????棩????????????????5??string??????string????????????????????????????????pstr[0...4]????????????new???????????????????????????????????????Щ????????????????????????Щ?????????????????????????????????棬?????????????????й???????????
????????????????
????C++?????????????????δ?????????棺
??????1??allocator??????????????????????????????????????????沢?????????汣?????
??????2????????е?operator new??operator delete??????????????????С???????δ?????????檔
????1??allocator??
????allocator?????????壬????????????????????????????????????????????£?
????allocator????????????????????allocator?????????????????????????С?????г?????????????????????????????δ????????allocator???????????construct??destroy???????????е????
????vector?????????????????vector????????????????????????????????????????Щ?????????????????????????????????????allocator???????????a?????STL vector?е?push_back??????
template <class T> class VECTOR
{
public:
VECTOR() : elements(NULL)?? first_free(NULL)?? end(NULL){}
void push_back(const T&);
private:
static allocator<T> alloc;
void reallocate();
T *elements;
T *first_free;
T *end;
};
????elements??????????????????first_free??????????????????????????end????????鱾???????????????????????????????????
template <class T> void VECTOR<T>::push_back(const T& t)
{
if (first_free == end)                    //???????п?????
{
reallocate();                        //??????????????????
}
alloc.construct(first_free?? t);            //?????????
++first_free;
}