将unique_ptr转换为派生类,作为函数的参数,该函数将unique_pr转换为基类并接受owenership



我已经阅读了关于堆栈溢出的各种类似于此问题的评论,但没有找到确切的问题解决方案。我有一个基类和派生类,还有一个包含并保持此对象所有权的类。

class Base { };
class Derived: public Base { };
class MyClass
{
std::vector<std::unique_ptr<Base>> myVector;
public:
MyClass() {}
void addElement (std::unique_ptr<Base> &base)
{
myVector.push_back(std::move(base));
}
};

当我尝试在类中添加派生对象时,我的代码无法编译。

MyClass myClass;
auto b = std::make_unique<Base>();
myClass.addElement(b);
auto d = std::make_unique<Derived>();
myClass.addElement (d); // <-- ERROR: error: cannot convert ‘std::unique_ptr >’ to ‘std::unique_ptr&’

函数必须通过值接受unique_ptr

void addElement (std::unique_ptr<Base> base)
{
myVector.push_back(std::move(base));
}

然后像这样调用成员函数:

MyClass myClass;
auto b = std::make_unique<Base>();
myClass.addElement(std::move(b));
auto d = std::make_unique<Derived>();
myClass.addElement(std::move(d));

或者更好地避免变量,因为在函数调用后无论如何都无法使用它们:

MyClass myClass;
myClass.addElement(std::make_unique<Base>());
myClass.addElement(std::make_unique<Derived>());

相关内容

  • 没有找到相关文章

最新更新