首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“解构主义”调用多于“构造者”调用?

为什么“解构主义”调用多于“构造者”调用?
EN

Stack Overflow用户
提问于 2019-07-07 01:47:37
回答 1查看 74关注 0票数 1

我正在尝试使用C++学习stl,我注意到deconstruct调用比construct调用多,我想知道我是否遗漏了什么。

以下是代码:

代码语言:javascript
复制
#include <vector>
#include <iostream>
using namespace std;

class Person {
  friend ostream &operator<<(ostream& os, const Person &p) {
    os << p.name << endl;
    return os;
  }
  string name;

public:
  Person() {
    cout << "created " << this->name << endl;
  };
  Person(string name):
    name{name} {
      cout << "created " << this->name << endl;
    }
  ~Person() {
    cout << "deconstructor " << this->name << endl;
  }
  bool operator<(const Person &rhs) const {
    return this->name < rhs.name;
  }

  bool operator==(const Person &rhs) const {
    return (this->name == rhs.name);
  }
};

int main(int argc, char** argv) {
    vector<Person> vec {{"test1"}, {"test2"}};
    Person p {"test2"};
    vector<Person>::iterator it = find(vec.begin(), vec.end(), p);
    Person p2 {"test3"};
    vec.insert(it, p2);
    for (auto &p : vec) {
      cout << p;
    }
}

这是输出:

代码语言:javascript
复制
created test1
created test2
deconstructor test2
deconstructor test1
created test2
created test3
deconstructor test2
deconstructor test1
test1
test3
test2
deconstructor test3
deconstructor test2
deconstructor test2
deconstructor test3
deconstructor test1

test1已经被解构了三次,但只创建了一次。

有什么解释吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-07 01:50:54

不要忘记创建副本构造函数。

代码语言:javascript
复制
Person(const Person &p): name{p.name} {
    cout << "created " << this->name << endl;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56918835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档