#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 один раз, конструктор копирования вызван только один раз. Я понял, где моя проблема, спасибо всем за вашу помощь.
Возможный дубликат [почему конструктор copy вызывается дважды при выполнении vector.push \ _back] (http://stackoverflow.com/questions/30358475/why-the-copy-constructor-is-called-twice -when-doing-a-vector-push-back) – Cristy
@Cristy: Не совсем, нет. –
@LightnessRacesinOrbit Как складываются вопросы? : D – Cristy