C++ 如何使用类类型指针制作向量

C++ How to make a vector with a class type pointer

本文关键字:向量 指针 类型 何使用 C++      更新时间:2023-10-16

所以基本上我想做一个叫做

vector <Employee> *EmployeeDB;
Employee *temp;

我想把这个放进去

temp = new Manager(first, last, salary, meetings, vacations);
EmployeeDB->push_back(*temp);

哦,我正在使用继承和多态性,这就是为什么新的是经理类型。

附言我忘了,父类是员工,它有 3 个继承父类的子类。 3 个子类是经理、研究员和工程师类。

似乎您要更改数据库类型,从:

std::vector <Employee> *EmployeeDB;

这是指向矢量的指针,保存 Employee 实例。这意味着矢量包含员工的副本,可能不是您想要的。

自:

std::vector <Employee*> EmployeeDB;

这是一个矢量实例,包含指向员工的指针。

您还应该照顾员工的所有权。一种解决方案可以用newdelete来处理它,但首选的解决方案是使用智能指针:

std::vector <std::unique_ptr<Employee> > EmployeeDB;

编辑:在类定义中,定义指针对象时空格标记无关紧要。

你的两个例子是一样的:Character* party[3]Character *party[3]的意思完全相同。

真正重要的是指针标记在模板化类定义中的位置(在std::vector<>专用化中<>符号的内部或外部)。

因此,拥有 [(向量) (指针)] (vector <Employee*>) 与拥有 [(指向向量的指针) (实例)] (vector <Employee>*) 是不一样的。

声明std::vector<Employee> *EmployeeDB时,创建指向向量的指针。如果希望容器包含多态类型,则需要像这样声明它:

std::vector<Employee*> EmployeeDB;

从现在开始,您可以致电:

Employee *temp = new Manager(first, last, salary, meetings, vacations);
EmployeeDB.push_back(temp);

编辑:

然而,更好的编程实践是使用std::shared_ptr<T>std::unique_ptr<T>而不是自己调用new(最终delete)。您可以通过将声明更改为以下方面来编写更安全的实现代码:

std::vector<std::shared_ptr<Employee>> EmployeeDB;

并将元素添加到您的向量中,如下所示:

auto tmp = std::make_shared<Employee>(Manager(first, last, salary, meetings, vacations))
EmployeeDB.push_back(tmp);

不要忘记添加#include <memory>以使用sharedunique指针包装器。