【发布时间】:2014-02-14 10:49:02
【问题描述】:
当调整向量大小时,它会调用构造函数然后销毁它。
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 中没有得到和你一样的结果。
-
@MohammedMajeed,没有优化,这是我的编译命令 g++ -Wall -o m main.cpp 。使用“g++ -Wall -O2 -o m main.cpp”会得到相同的结果。
-
@herohuyongtao 好像多出了一个,只好销毁了。
-
@camino 您的编译器或它附带的标准库似乎有问题。我在 ideone 上运行了你的代码,它运行良好。 ideone.com/7GJPbA
-
看看here。我不认为它是重复的,但它很接近。