//容器操作的生命周期: 对象放入容器 常用操作对象的生命周期
#include <iostream>
#include <set> //set 容器不能存放对象,因为会有隐式的排序操作 less<object> 对象不能排序 解决:重写排序的仿函数
#include <vector>
using namespace std;
class Person {
private:
string name;
public:
Person(string name) : name(name) {}
string getName() {
return this->name;
}
void setName(string name) {
this->name = name;
}
Person(const Person &person) {
this->name = person.name; //浅拷贝
cout << "Person的拷贝构造函数执行了" << endl;
}
~Person() {
cout << "Person的析构函数执行了" << endl;
}
};
int main() {
vector<Person> vectorVar;
Person P1("vivid");//①栈区开辟P1 旧地址 ④main出栈 P1(Person)被析构一次
vectorVar.insert(vectorVar.begin(), P1);//②intser 插入的P1是经过拷贝构造函数后创建对应旧地址的新地址P1 ⑤insert 出栈 新地址P1被析构一次
P1.setName("MOMO");
cout << "P1的name:" << P1.getName().c_str() << endl;//MOMO
Person P2 = vectorVar.front();//③把vectorVar中旧地址的Person经过拷贝构造函数创建一份新地址的Person给P2 ⑥main出栈 P2(Person)被析构一次
cout << "P2的name:" << P2.getName().c_str() << endl;//vivid
return 0;
// 执行结果: 两次构造 三次析构
// Person的拷贝构造函数执行了
// P2的name:MOMO
// Person的拷贝构造函数执行了
// P2的name:vivid
// Person的析构函数执行了
// Person的析构函数执行了
// Person的析构函数执行了
}
C++ 容器的生命周期
最新推荐文章于 2023-03-31 16:52:27 发布