[英]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*());
}
我建议 method.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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.