C++ 如何使用类类型指针制作向量
C++ How to make a vector with a class type pointer
所以基本上我想做一个叫做
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;
这是一个矢量实例,包含指向员工的指针。
您还应该照顾员工的所有权。一种解决方案可以用new
和delete
来处理它,但首选的解决方案是使用智能指针:
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>
以使用shared
和unique
指针包装器。
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化