c++STL vector擴容過程
阿新 • • 發佈:2019-01-01
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)