調整矢量大小時,它會調用構造函數然後將其破壞。調整容器大小時的奇怪行爲
struct CAT
{
CAT(){cout<<"CAT()"<<endl;}
CAT(const CAT& c){cout<<"CAT(const CAT& c)"<<endl;};
~CAT(){cout<<"~CAT()"<<endl;};
};
int main()
{
vector<CAT> vc(6);
cout<<"-----------------"<<endl;
vc.resize(3);
cout<<"-----------------"<<endl;
}
輸出:
$./m
CAT()
CAT(const CAT& c)
CAT(const CAT& c)
CAT(const CAT& c)
CAT(const CAT& c)
CAT(const CAT& c)
CAT(const CAT& c)
~CAT()
-----------------
CAT() //why resize will call constructor?
~CAT()
~CAT()
~CAT()
~CAT()
-----------------
~CAT()
~CAT()
~CAT()
我使用Ubuntu 13.10和gcc4.8
你有任何優化打開?我在VS2013中獲得的結果與您不一樣。 – Caesar
@MohammedMajeed,沒有優化,這裏是我的編譯命令g ++ -Wall -o m main.cpp。使用「g ++ -Wall -O2 -o m main.cpp」會得到和我一樣的結果。 – camino
@herohuyongtao它似乎創造了一個額外的,所以它不得不被破壞。 – Caesar