C++ 对象存入到容器后 对象的生命周期 状态

227 阅读1分钟

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析构函数执行了