C++唯一指针的向量
C++ vector of unique pointers
这是我的代码:
class FurnitureShop {
static const int FURNITURE_RESUPPLY = 50;
std::string name;
std::vector<std::unique_ptr<Employee>> employees;
int completedTasks;
public:
FurnitureShop(std::string name);
void addEmployee(std::unique_ptr<Employee> &&employee);
//...
此类的属性"雇员"包含唯一指针的向量。我想实现方法addEmployee:
void FurnitureShop::addEmployee(unique_ptr<Employee> &&employee) {
this->employees.insert(employee.operator*());
}
我建议方法 .operator*(( 应该访问唯一指针所在的第一个对象。无论如何,正如我得到的结果,这效果不佳(或按预期(。你能指导我哪里做错了吗?
employee.operator*()
与*employee
相同。这意味着您尝试插入实际的Employee
对象,而不是唯一指针。
您应该将唯一指针对象本身移动到矢量中:
void FurnitureShop::addEmployee(unique_ptr<Employee> employee) {
employees.emplace_back(std::move(employee));
}
您正在从employee
插入基础原始指针(在本例中,该指针仍归employee
所有,并在作为参数传递的std::unique_ptr
的析构函数中被销毁(,而您想要的是移动传递的std::unique_ptr
本身(因为您已经在传递右值引用,即使代码段中的签名不匹配(。现在发生的情况是,您插入原始指针,当函数参数被销毁时,它被删除。
你想要的是:
void FurnitureShop::addEmployee(unique_ptr<Employee> &&employee) {
this->employees.emplace_back(std::move(employee));
}
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化