将指针推回向量c ++

时间:2013-04-15 19:28:37

标签: c++ pointers vector

这是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也不起作用。

这通常是如何完成的?

2 个答案:

答案 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));

这里我们只在我们真正需要时才会手动分配内存。