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