C++ 对象存入到容器后 对象的生命周期 状态
#include <iostream>
#include <vector> // 存入对象
using namespace std;
class Person {
private:
string name;
public:
Person(string name) : name(name) {}
void setName(string name) {
this->name = name;
}
string getName() {
return this->name;
}
Person(const Person &person) {
this->name = person.name; // 浅拷贝
cout << "Person拷贝构造函数执行了..." << endl;
}
~Person() {
cout << "Person析构函数执行了" << endl;
}
};
int main() {
// Java:把对象存入 添加到 集合
// C++: 调用拷贝构造函数,存进去的是另一个新的对象
vector<Person> vectorVar;
// person 被main函数弹栈 析构一次
Person person("张三"); // 2 Cat
// 里面的insert函数弹栈 析构一次
// 外面的person是旧地址,到insert函数里面的person就是新地址(拷贝构造函数 一次)
vectorVar.insert(vectorVar.begin(), person);
person.setName("李四"); // 1
// newPerson 被main函数弹栈 析构一次
// front里面的person是旧地址, 外面的newPerson就是新地址(拷贝构造函数 一次)
Person newPerson =vectorVar.front();
cout << "person:" << person.getName().c_str() << endl;
cout << "newPerson:" << newPerson.getName().c_str() << endl;
// 3次析构函数 两次拷贝构造
return 0;
} // main弹栈
输出
Person拷贝构造函数执行了...
Person拷贝构造函数执行了...
person:李四
newPerson:张三
Person析构函数执行了
Person析构函数执行了
Person析构函数执行了