【问题标题】:Pushing back a pointer into a vector c++将指针推回向量c ++
【发布时间】:2013-04-15 19:28:36
【问题描述】:

这是对Using vectors to store different objects inherited from the same parent class c++ 的跟进,但您无需阅读即可理解。

我有一个多项式类和另一个类是容器类。在容器类中有一个包含多项式指针的向量。 我以这种方式定义了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 也不起作用。

这通常是如何完成的?

【问题讨论】:

    标签: c++ pointers vector


    【解决方案1】:

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

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

    【讨论】:

    • 错误 C2248: 'std::unique_ptr<_ty>::unique_ptr' : 无法访问在类 'std::unique_ptr<_ty>' 1> 中声明的私有成员 1> [ 1> _Ty=多项式
    • @jazzybazz:请提供更完整的产生该错误的代码示例。
    【解决方案2】:

    虽然 Benjamin 对您的代码的修改有效,但我觉得它有点倒退。毕竟,unique_ptr 没有复制构造函数是有充分理由的;您的代码可以受益于使用普通对象而不是指针:

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 2012-09-08
      • 2020-04-13
      • 2020-03-10
      • 1970-01-01
      • 2019-09-10
      • 2021-09-20
      • 1970-01-01
      相关资源
      最近更新 更多