将指针回推为向量

Pushing back a pointer into a vector c++

本文关键字:向量 指针      更新时间:2023-10-16

这是使用vector来存储从同一个父类继承的不同对象c++的后续,但是你不需要阅读它来理解。

有一个多项式类和另一个容器类。在容器类中有一个vector,用于保存指向多项式的指针。我这样定义了vectorPolynomial:

std::vector<std::unique_ptr<Polynomial>> vectorPolynomial;

在多项式类中有一个二元运算符,该运算符接受两个多项式并返回本身为多项式的结果。

在多态性之前,操作符返回一个多项式类型的对象,我只是这样做:

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

这通常是怎么做的?

unique_ptr没有复制构造函数。所以你需要移动它:

vectorPolynomial.emplace_back(std::move(result));

虽然Benjamin对您的代码的修改有效,但我觉得它有点落后。毕竟,unique_ptr没有复制构造函数是有原因的;您的代码可以从使用普通对象而不是指针中获益:

Polynomial polynomialresult = *vectorPolynomial[i] % *vectorPolynomial[j];
vectorPolynomial.emplace_back(new Polynomial(polynomialresult));

在这里,我们只在实际需要时才手动分配内存,而不是更早。