C++唯一指针的向量

C++ vector of unique pointers

本文关键字:向量 指针 唯一 C++      更新时间:2023-10-16

这是我的代码:

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));
}