我的类包含一个指向数组的唯一指针。当调用复制构造函数时,我希望该类创建自己的唯一指针数组,并只复制旧的唯一指针数组的内容。我一直有关于从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;
我只想制作一份深层照片。我怎样才能做到这一点呢?
答案 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)
在给您错误的行中,managers
是std::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);
}