这是Using vectors to store different objects inherited from the same parent class c++的后续内容,但您无需阅读即可理解。
我有一个多项式类,另一个类是容器类。在容器类中,有一个包含多项式指针的向量。 我用这种方式定义了vectorPolynomial:
std::vector<std::unique_ptr<Polynomial>> vectorPolynomial;
在多项式类中,有一个二元运算符,它执行一个操作,该操作接受两个多项式并返回多项式本身的结果。
在多态之前,运算符返回了Polynomial类型的对象,我只是这样做了:
Polynomial polynomialresult = polynomial1 % polynomial2;
vectorPolynomial.push_back(polynomialresult);
现在因为向量不再是多项式的向量,所以这不起作用。这是我试过的:
std::unique_ptr<Polynomial> result(new Polynomial);
*result = *(vectorPolynomial[i]) % *(vectorPolynomial[j]);
vectorPolynomial.emplace_back(result);
这不起作用。我也尝试过:
Polynomial * result = new Polynomial;
而不是unique_ptr,但它也不起作用。 push_back而不是emplace_back也不起作用。
这通常是如何完成的?
答案 0 :(得分:4)
unique_ptr
没有复制构造函数。所以你需要移动它:
vectorPolynomial.emplace_back(std::move(result));
答案 1 :(得分:1)
虽然本杰明对你的代码的修改工作,但我觉得它有点倒退。毕竟,unique_ptr
有充分理由没有复制构造函数;您的代码可以从使用普通对象而不是指针中受益:
Polynomial polynomialresult = *vectorPolynomial[i] % *vectorPolynomial[j];
vectorPolynomial.emplace_back(new Polynomial(polynomialresult));
这里我们只在我们真正需要时才会手动分配内存。