#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
class items{
char * name;
public:
items(const char * str){
int len = strlen(str);
this->name = new char [len];
strcpy(this->name,str);
cout << "Default ctor " << this->name << " \[email protected]" << (this) << endl;
}
items(const items& obj){
int len = strlen(obj.name);
this->name = new char [len];
strcpy(name,obj.name);
cout << "Copy ctor " << this->name << " \[email protected]" << this << endl;
}
~items(){
cout << "dtor \t" << this->name << "\[email protected]" << this << endl;
delete [] name;
}
const char * getName() const{
return this->name;
}
};
ostream& operator<<(ostream& stream, const items& obj){
stream << obj.getName();
return stream;
}
int main(int argc, char ** argv){
items Ruler("Ruler"), Pencil("Pencil"), Book("Book"), Notebook("Notebook"), Sharpener("Sharpener");
vector<items> school;
school.push_back(Ruler);
school.push_back(Pencil);
school.push_back(Book);
return 0;
}
나는 기괴한 결과가 있습니다. 현장 뒤에서 일어나는 일을 설명해 주시겠습니까? 결과 :너무 많은 복사본을 찾을 수 없습니다.
Default ctor Ruler @0x62ff1c
Default ctor Pencil @0x62ff18
Default ctor Book @0x62ff14
Default ctor Notebook @0x62ff10
Default ctor Sharpener @0x62ff0c
Copy ctor Ruler @0x9cd1d0
Copy ctor Pencil @0x9cd504
Copy ctor Ruler @0x9cd500
dtor Ruler @0x9cd1d0
Copy ctor Book @0x9c0510
Copy ctor Ruler @0x9c0508
Copy ctor Pencil @0x9c050c
dtor Ruler @0x9cd500
dtor Pencil @0x9cd504
dtor Ruler @0x9c0508
dtor Pencil @0x9c050c
dtor Book @0x9c0510
dtor Sharpener @0x62ff0c
dtor Notebook @0x62ff10
dtor Book @0x62ff14
dtor Pencil @0x62ff18
dtor Ruler @0x62ff1c
기본 구성 후에 어떤 현상이 발생합니까? 왜이 통치자가 너무 많은 복사본을 만들어 파괴합니까? 여기에 어떤 문제가 있습니까?
"기본 생성자"가 기본 생성자가 아니 어서 오해의 소지가 있습니다. – Quentin
예상했던 사본을 설명하면 오해에 대해 설명 할 수 있습니다. – user2357112
벡터에서 아이템을 푸시 할 때 임시 복사본이 만들어 짐 – FamZ