雖然試圖通過「傳值」和隨後的破壞與拷貝構造做實驗,我想這樣的代碼:實驗拷貝構造一個向量
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Rock{
int sz;
public:
Rock():sz(0){cout<< "Default ctor"<<endl;}
~Rock(){cout<< "Dtor"<<endl;}
Rock(const Rock& r){ cout << "Copy ctor" << endl; sz = r.sz;}
Rock& operator=(const Rock& r) {cout << "In assignment op" << endl; sz = r.sz;}
};
int main()
{
vector<Rock> rocks;
Rock a, b, c;
rocks.push_back(a);
rocks.push_back(b);
rocks.push_back(c);
return 0;
}
,並得到了以下的輸出。直到第7行一切都很好,但我無法理解從那時起會發生什麼。有人可以澄清嗎?
Default ctor
Default ctor
Default ctor
Copy ctor
Copy ctor
Copy ctor // all fine I got it...
Dtor
Copy ctor
Copy ctor
Copy ctor
Dtor
Dtor
Dtor
Dtor
Dtor
Dtor
Dtor
Dtor
這是一個非常具有誤導性的輸出語句:'Rock&operator =(const Rock&r){cout <<「Copy ctor」<< endl; sz = r.sz;}'你應該考慮改變它,特別是當你的實際拷貝構造函數輸出完全相同的信息。 – 2012-01-14 14:19:57
確實,複製粘貼錯誤...應該是分配操作員相關;-) Thx – 2012-01-14 14:21:45
說'rocks.reserve(10);'在開始時比較。 – 2012-01-14 14:55:38