לא מבין למה מתקבל פלט מסוים

לא מבין למה מתקבל פלט מסוים

לגבי הקוד הבא:
קוד:
class Person
{
	char name[10];
public:
Person(const char* name) {setName(name);}
Person(const Person& other) 
{ 
cout << "In Person(copy) " << other.name << "\n";
*this = other;
}
~Person() { cout << "In Peron::~Person " << name << "\n"; }
void setName(const char* name) {strcpy(this->name, name);}
};

void main()
{
vector<Person> persons;
vector<Person*> personsPtr;

Person p1("gogo"), p2("momo");

persons.push_back(p1);
persons.push_back(p2);

personsPtr.push_back(&p1);
personsPtr.push_back(&p2);

p1.setName("gogogo");
}

מדוע מתקבל הפלט הבא:
קוד:
In Person(copy) gogo
In Person(copy) gogo
In Peron::~Person gogo
In Person(copy) momo
In Peron::~Person momo
In Peron::~Person gogogo
In Peron::~Person gogo
In Peron::~Person momo
 
למעלה