我試圖在以下守則:第一次破壞來自哪裏?
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
virtual void f(){cout<<"A"<<endl;}
virtual ~A(){cout<<"destruct A"<<endl;}
};
int main()
{
A o1,o2;
vector <A > O;
O.push_back(o1);
cout<<"1"<<endl;
O.push_back(o2);
cout<<"test"<<endl;
return 0;
}
結果竟然是:
1
destruct A
test
destruct A
destruct A
destruct A
destruct A
弄不清楚其中,第一析構函數得來的。
不明白爲什麼「O需要擴展,所以創建一個新的範圍,並將舊值從舊範圍複製到新範圍。」 – 2012-03-21 14:20:34
當首次創建「O」時,它可能創建的容量爲1.在第一個元素被推入後,它現在已滿。但是矢量會自動擴展,並且一旦完成,它必須將舊數據範圍內的所有元素複製到新數據範圍。如果在開始推送元素之前調用'O.reseve()',那麼這個額外的副本將會消失。 – 2012-03-21 15:53:02