一个关于vector中push_back()方法的小疑点

一个关于vector中push_back()方法的小问题
我在定义了一个CTest类后用来测试vector,在CTest的析构函数中加入了输出语句
主类中代码如下
[code=C/C++]
CTest me;
CTest me1("ok", 2);
//me.Print();
vector<CTest> tvec;

tvec.push_back(me); //此句执行完后调用CTest的析构一次
tvec.push_back(me1); //此句执行完后调用CTest的析构两次
tvec.push_back(me1); //此句执行完后调用CTest的析构三次  
cout << "test" << endl; //在此语句输出前已经调用了6次(1+2+3)CTest的析构函数 vector<CTest> tvec1(tvec);

(++tvec1.begin())->Print();
[code]
也就是说每push_back一个元素就会都要析构size次该vector中的元素(size为vector的长度),如果每次push_back(element)是将element作为副本拷贝给vector中的新元素,并释放(析构)element,那么按理说每次push_back()都只会析构一次,但为什么是这种情况呢?费解...难道每次push_back()都要将vector中的所有元素都重新赋值一次并释放所有副本?求解!


------解决方案--------------------
那些就要看实现了,每次增加元素的时候都有可能引起重新分配内存,元素拷贝的过程.

不过建议预先分配vector所需要的内存
调用Reserves