#include<iostream>
#include<vector>
#include<list>
#include<queue>
#include<map>
using namespace std;
class dog{
public:
string name;
dog();
dog(const dog & d);
void barkname(){
cout<<"bark "<<name<<endl;
}
virtual ~dog(){
//cout<<"delete dog "<<name<<endl;
}
};
dog::dog(){
cout<<"blank dog"<<endl;
this->name="blank";
}
dog::dog(const dog &d){
cout<<"copy dog"<< " "+d.name<<endl;
string temp=d.name;
this->name=temp+" copied";
}
int main(){
dog d;
d.name="d";
dog dd;
dd.name="dd";
dog ddd;
ddd.name="ddd";
vector<dog> doglist;
doglist.push_back(d);
doglist.push_back(dd);
doglist.push_back(ddd);
return 0;
}
你好,我是新來的cpp。我試圖在我的班級狗中使用複製構造函數。我使用push_back三次將三隻狗推入矢量中。所以我期望複製構造函數被調用三次。但是,在執行代碼後,我發現,拷貝構造函數被調用六次,結果如下:什麼時候在cpp中調用拷貝構造函數?
blank dog
blank dog
blank dog
copy dog d
copy dog dd
copy dog d copied
copy dog ddd
copy dog d copied copied
copy dog dd copied
我很困惑,爲什麼狗被複制了很多次。我只執行了三次push_back。 謝謝。
感謝您指出了一個類似的問題: why the copy-constructor is called twice when doing a vector.push_back
在這篇文章中,筆者只有一個的push_back對象,但拷貝構造函數得到調用兩次。但是,就我而言,當我調用push_back一次時,複製構造函數只被調用一次。我瞭解我的問題在哪裏,謝謝大家的幫助。
[爲什麼複製構造函數在執行vector.push \ _back時被調用兩次]可能的副本(http://stackoverflow.com/questions/30358475/why-the-copy-constructor-is-called-twice - 當做矢量推回) – Cristy
@Cristy:不是,不。 –
@LightnessRacesinOrbit問題如何不同? :D – Cristy