【发布时间】:2020-11-01 15:11:42
【问题描述】:
我在下面尝试了一个简单的代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class employee
{
private:
int emp_id;
public:
void getEmpid(){cout<<emp_id<<endl;}
void setEmpid(){ cin>>emp_id;}
employee():emp_id(10){cout<<"construct 1 "<<"employee id "<<emp_id<< endl;}
employee(int empid):emp_id(empid){cout<<"construct 2 "<<"employee id "<<emp_id<<endl;}
employee(const employee &emp):emp_id(emp.emp_id){cout<<"copy construct 3 "<<"employee id "<<emp_id<<endl;}
employee(employee&& other) : emp_id(other.emp_id) {cout<<"move construct 4 "<<"employee id "<<emp_id<<endl;}
~employee(){cout<<"destructor"<<endl;}
};
int main()
{
vector<employee>a;
employee s[8]={1,2,3,4,5};
for(int i=0;i<sizeof(s)/sizeof(s[0]);i++)
a.push_back(s[i]);
a.push_back(20);
a.push_back(30);
a.push_back(40);
a.push_back(50);
a.push_back(60);
for(int i=0;i<a.size();i++)
a[i].getEmpid();
return 0;
}
*我得到以下输出。 不太清楚如何调用构造函数和析构函数以及调用顺序。 有人可以请一些光吗? *
输出:
构造 2 个员工 ID 1
构造 2 个员工 ID 2
构造 2 个员工 ID 3
构造 2 个员工 id 4
构造 2 个员工 id 5
构造 1 个员工 id 10
构造 1 个员工 id 10
构造 1 个员工 id 10
复制构造 3 员工 ID 1
复制构造 3 员工 ID 2
复制构造 3 员工 ID 1
析构函数
复制构造 3 员工 ID 3
复制构造 3 员工 ID 1
复制构造 3 员工 ID 2
析构函数
析构函数
复制构造 3 员工 ID 4
复制构造 3 员工 ID 5
复制构造 3 员工 ID 1
复制构造 3 员工 ID 2
复制构造 3 员工 ID 3
复制构造 3 员工 ID 4
析构函数
析构函数
析构函数
析构函数
复制构造 3 员工 ID 10
复制构造 3 员工 ID 10
复制构造 3 员工 ID 10
构造 2 个员工 id 20
移动构造 4 员工 ID 20
复制构造 3 员工 ID 1
复制构造 3 员工 ID 2
复制构造 3 员工 ID 3
复制构造 3 员工 ID 4
复制构造 3 员工 ID 5
复制构造 3 员工 ID 10
复制构造 3 员工 ID 10
复制构造 3 员工 ID 10
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
构造 2 个员工 id 30
移动构造 4 员工 ID 30
析构函数
构造 2 个员工 id 40
移动构造 4 员工 ID 40
析构函数
构造 2 个员工 ID 50
移动构造 4 员工 ID 50
析构函数
构造 2 个员工 id 60
移动构造 4 员工 ID 60
析构函数
1
2
3
4
5
10
10
10
20
30
40
50
60
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
析构函数
【问题讨论】:
-
欢迎来到 StackOverflow!如果您在每个函数中打印出员工 ID,也许会有助于解释发生了什么。
-
不是很清楚如何调用构造函数和析构函数以及调用顺序 -- 你应该减少你的
main程序,以便得到一个更易于管理的例子。main中发生的事情太多了。比如与vector、employee s[8]={1,2,3,4,5};无关的第一行生成输出。 -
你为什么不自己尝试一下呢?使用调试器,在涉及类对象的每个语句上设置断点,查看输出屏幕,查看变量。提出你的理论,如果你错了,我们很乐意纠正你。
-
肯定试一试,容量满时不确定分配/解除分配,感谢Waqar的回答
标签: c++ vector constructor destructor