gpt4 book ai didi

c++ - 复制构造函数的问题

转载 作者:行者123 更新时间:2023-11-30 01:59:13 27 4
gpt4 key购买 nike

不要关注实际代码,只需阅读问题。我有一个函数,它接受 2 个多项式类型的参数:

FiniteFieldElement(int l, Polynomial p, Polynomial irr)
{
this->l = l;
this->p = p;
this->irr = irr;
}

我的理解是 Polynomial 的复制构造函数将在传递 p 和 irr 时被调用。

复制构造函数工作正常,我可以通过最后的断点进行验证。

Polynomial(const Polynomial& p)
{
degree = p.degree;
modulo = p.modulo;
if (polynomial != p.polynomial)
{
polynomial = new int[degree + 1];
for (int i = 0; i <= degree; i++)
{
polynomial[i] = p.polynomial[i];
}
}
}

但为什么我会得到实际参数 p 和 irr 的错误(未初始化)值。复制构造函数的结果和实际参数之间会发生什么?如果我将参数更改为引用参数,它可以正常工作。 (注意:多项式没有析构函数,如果有帮助的话)。

编辑:如果我使用复制构造函数 Polynomial p1(p2) 声明一个多项式,p1 会正确初始化。在类 FiniteFieldElement 中,我得到了错误的多项式参数。我完全被难住了。

最佳答案

My understanding is that Polynomial's copy constructor will be called when p and irr are being passed.

这只是部分正确。由于 Polinomials 是按值传递的(但复制省略可能意味着根本不进行复制),因此可能会创建一个拷贝,但在 FiniteFieldElement(int l, Polynomial p, Polynomial irr)Polynomial 的复制赋值运算符将被调用,假设 this->pthis->irr 类型>多项式。因此,您类(class)的字段是作业的结果,而不是拷贝。

因此您应该查看复制赋值运算符的实现。

关于c++ - 复制构造函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com