1. 程式人生 > >c++STL vector擴容過程

c++STL vector擴容過程

class A
{
public:
    A(){ cout << "construct" << endl; }
    A(const A &a){ cout << "copy construct" << endl; }
    ~A(){ cout << "destruction" << endl; }
};
int main(void)
{
    vector<A> p;
    A a;
    A b;
    p.push_back(a);
    p.push_back(b);

}

這裡寫圖片描述

分析:
首先構造a,b (construct,construct)
push_back(a)會呼叫物件的複製建構函式構造一個物件p(copy construction),在將這個p的放入vector中(push_back的引數是const引用),當需要放b時,容量不夠,擴容(分配新的大小使用allocate類,分配的capacity為原來的1.5(我測試是這樣,但是原始碼中好像是兩倍)),將容器裡的物件複製構造然後放入到新的容器中(copy construction)),將舊容器裡的物件刪除(destruction),然後呼叫b的copy struction,最後程式結束後呼叫a,b和容器裡的兩個物件的解構函式(4個destruction)