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

Luc*_*cas 5 c++ smart-pointers unique-ptr

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

我的指针在 private 下声明如下:

std::unique_ptr<Manager[]> managers;
Run Code Online (Sandbox Code Playgroud)

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

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

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

Manager *_managers = _r.managers;
Run Code Online (Sandbox Code Playgroud)

我只想制作一个深拷贝。我该如何去做才能使这项工作成功?

4pi*_*ie0 4

它无法编译的原因是它的 _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];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Manager *_managers = _r.managers.get();
Run Code Online (Sandbox Code Playgroud)

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

for (int i = 0; i < MAX_MANAGERS; i++) {
        managers.get()[i] = _managers[i];
}
Run Code Online (Sandbox Code Playgroud)