复制复制构造函数中唯一指针数组的内容

时间:2014-01-29 00:19:21

标签: c++ smart-pointers unique-ptr

我的类包含一个指向数组的唯一指针。当调用复制构造函数时,我希望该类创建自己的唯一指针数组,并只复制旧的唯一指针数组的内容。我一直有关于从const值转换的错误,我不知道如何绕过它。

我的指针在私有下声明如下:

std::unique_ptr<Manager[]> managers;

我计划循环遍历数组并手动复制,所以我制作了这个复制构造函数:

Restaurant::Restaurant(const Restaurant &_r)
{
    Manager *_managers = _r.managers;
    for (int i = 0; i < MAX_MANAGERS; i++)
    {
        managers.get()[i] = _managers[i];
    }
}

它在这一行给出了const转换错误:

Manager *_managers = _r.managers;

我只想制作一份深层照片。我怎样才能做到这一点呢?

3 个答案:

答案 0 :(得分:3)

它不会编译的原因是  _r.managers的类型为std::unique_ptr<Manager[]>,但您希望使用此初始化原始指针。

只需将其更改为:

Restaurant::Restaurant(const Restaurant &_r)
{
    for (int i = 0; i < MAX_MANAGERS; i++)
    {
        managers.get()[i] = _r.managers.get()[i];
    }
}

或首先获取智能指针的数据(这是一个数组)

Manager *_managers = _r.managers.get();

然后您可以像以前一样使用它:

for (int i = 0; i < MAX_MANAGERS; i++) {
        managers.get()[i] = _managers[i];
}

答案 1 :(得分:1)

在给您错误的行中,managersstd::unique_ptr<Manager[]>。您正尝试将其分配给Manager*,但这不起作用。

您可以通过获取unique_ptr的原始指针来修复它,例如:

Manager *_managers = _r.managers.get();

答案 2 :(得分:1)

为了复制unique_ptr<>的内容,你可能需要使用“深拷贝”,这意味着你在类copy constructor中编写了Manager和一个克隆函数。 复制构造函数示例:

Manager(Manager const& manager) {
  name = manager.name;
  title = manager.title;
}

克隆功能:

unique_ptr<Manager> clone() const {
  return make_unique<Manager>(*this);
}